Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature add render.com support #678

Merged
merged 6 commits into from
Oct 25, 2023

Conversation

qsimpleq
Copy link
Contributor

@qsimpleq
Copy link
Contributor Author

Всё работает.

Нужно протестировать руками выползающие ошибки, при наличии доступа к платному варианту render.com, т.к. там есть доступ к консоли.

Заниматься отладкой вслепую я устал уже

@qsimpleq qsimpleq force-pushed the feature-add-render.com-support branch from 9af82a5 to 218082c Compare September 25, 2023 08:34
Gemfile Outdated
@@ -44,6 +44,7 @@ gem 'devise-i18n'
gem 'dotenv-rails'
gem 'dry-container'
gem 'enumerize'
gem 'faker', require: false
Copy link
Collaborator

@fey fey Sep 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@usernaimandrey посмотри, плз.

Вероятно нам фейкер не нужен для прода. А прод у нас по сути только один. Рендер все еще дев/стейдж окружение. Может быть просто будем ставить дев+прод зависимости?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да faker не нужен, мы же деплоим это herocku, а туда лишний ненужный гем незачем тащить, он же нужен только для render, cчитаю что это можно просто указать в описание в REDME, что для загрузки фикстур нужен этот гем.

export DOTENV_FILE='/etc/secrets/env'
if [ -f "$DOTENV_FILE" ]; then export $(sed '/^\s*$/d; /^[[:space:]]*#/d' "$DOTENV_FILE"); fi
cd $current_dir
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а для чего вот это? В рендер можно использовать обычные переменные окружения.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно свой .env файл загрузить просто и не мучаться с этими переменными

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

да там и так, и через web интерфейс можно их натыкать, но через скрипт меньше ручной работы, тем более .env автоматом генерируется, главное чтобы не забыли в нем значения прописать

@fey
Copy link
Collaborator

fey commented Sep 25, 2023

Вообще рендер это еще не прод окружение. Задача деплоя на рендер пока что - показать как выглядят наши изменения.
Поэтому можно использовать. Плюс вижу, что используются сиды, но они нам не особо нужны, тк есть фикстуры.
Попрошу @usernaimandrey глянуть изменения.

Главные сомнения у меня по поводу фейкера

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 25, 2023

Вообще рендер это еще не прод окружение. Задача деплоя на рендер пока что - показать как выглядят наши изменения. Поэтому можно использовать. Плюс вижу, что используются сиды, но они нам не особо нужны, тк есть фикстуры. Попрошу @usernaimandrey глянуть изменения.

Главные сомнения у меня по поводу фейкера

  1. Фикстуры не грузятся без фейкера
  2. На базах render стоит запрет на отключение constraints, поэтому проваливается залив фикстур напрямую
    Из-за этого мне пришлось в seeds указывать порядок заливки фикстур, чтобы наполнить базу

@usernaimandrey
Copy link
Contributor

usernaimandrey commented Sep 25, 2023

Вообще рендер это еще не прод окружение. Задача деплоя на рендер пока что - показать как выглядят наши изменения. Поэтому можно использовать. Плюс вижу, что используются сиды, но они нам не особо нужны, тк есть фикстуры. Попрошу @usernaimandrey глянуть изменения.

Главные сомнения у меня по поводу фейкера

@fey про фейкер я отписал, а Кирилл прав без сидов фикстуры не загрузишь, команда bin/rails db:fixtures:load с ошибкой падает

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 25, 2023

Всё, с faker подправил и чутка README обновил

@fey
Copy link
Collaborator

fey commented Sep 25, 2023

@fey про фейкер я отписал, а Кирилл прав без сидов фикстуры не загрузишь, команда bin/rails db:fixtures:load с ошибкой падает

а что пишет? А мы можем данные предварительно загрузить, например локально, передав урл базы данных?

Например DATABASE_URL='' make prepare-db

Может еще ребят позвать, спросить, как еще можно сделать.

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 25, 2023

@fey про фейкер я отписал, а Кирилл прав без сидов фикстуры не загрузишь, команда bin/rails db:fixtures:load с ошибкой падает

а что пишет? А мы можем данные предварительно загрузить, например локально, передав урл базы данных?

Например DATABASE_URL='' make prepare-db

Может еще ребят позвать, спросить, как еще можно сделать.

#660 (comment)

Там ничего не сделать - в базе нет прав на отключение триггеров, которые гасятся, чтобы проигнорить constraints

В дополнительном шаге из генерации дампа базы не вижу смысла - больше проблем и боли новичкам будет, кмк


Порешал проблему так https://github.com/qsimpleq/hexlet-cv/blob/cec534c81feb63150e4d5a9861ffb5eba6ad5031/bin/render-build.sh#L10C1-L12C46

@fey
Copy link
Collaborator

fey commented Sep 25, 2023

Пока задал вопросам ребятам-разработчикам. Может быть они подскажут, как лучше.
В других проектах (например hexlet-sicp) не используются фикстуры, а сиды, либо подгружаются реальные данные.

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 25, 2023

Пока задал вопросам ребятам-разработчикам. Может быть они подскажут, как лучше. В других проектах (например hexlet-sicp) не используются фикстуры, а сиды, либо подгружаются реальные данные.

Важный момент, ещё раз. На бесплатном плане нет доступа к консоли, так что приколачивать rake таски или что-то такое - бесполезно.

Можно добавить ещё одну переменную окружения в seeds, в зависимости от которой будут грузиться фикстуры или реальные данные на render.com вот и всё)

if ENV['RENDER']&.to_i&.positive? && ENV['RENDER_LOAD_FIXTURES']&.to_i&.positive?
  require_relative 'seeds/render_load_fixtures'
  render_load_fixtures
end

@usernaimandrey
Copy link
Contributor

Пока задал вопросам ребятам-разработчикам. Может быть они подскажут, как лучше. В других проектах (например hexlet-sicp) не используются фикстуры, а сиды, либо подгружаются реальные данные.

О каких реальных данных идет речь и откуда они подгружаются?

@fey
Copy link
Collaborator

fey commented Sep 25, 2023

О каких реальных данных идет речь и откуда они подгружаются?

в hexlet-sicp есть сиды, но там не проблема поднять приложение в дев-режиме.

в hexlet-friends подгружаются данные с github, т.е. нет потребности генерить тестовые данные

@usernaimandrey
Copy link
Contributor

@fey про фейкер я отписал, а Кирилл прав без сидов фикстуры не загрузишь, команда bin/rails db:fixtures:load с ошибкой падает

а что пишет? А мы можем данные предварительно загрузить, например локально, передав урл базы данных?

Например DATABASE_URL='' make prepare-db

Может еще ребят позвать, спросить, как еще можно сделать.

image
да особо ни чего не пишет, просто на этой команде падает

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 25, 2023

Проблема тут. Писал выше уже

image

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Sep 26, 2023

@fey, если пока молчат, то предлагаю мой вариант выбрать #678 (comment)

Он никак не повлияет на сиды, если потребуются реальные данные в будущем,
а для развёртывания на render - удобный при этом

@fey
Copy link
Collaborator

fey commented Sep 26, 2023

@corsicanec82 Стас, можешь посмотреть, пожалуйста, ПР? Может все ок и я зря переживаю.

@fey
Copy link
Collaborator

fey commented Sep 27, 2023

@qsimpleq обсудили. Добавляем новый енв, стейджинг, который будет использовать постгрес и будет в принципе деплоиться на рендере и подобных сервисах.
Туда мы можем положить и фейкер и другие штуки. Т.е. нужно добавить конфиг под новое окружение + можно в гемфайле указать, чтобы фейкер ставился для staging. Собственно на проде фейкер нам не нужен, а стейдж - в самый раз

https://ru.hexlet.io/blog/posts/environment

@qsimpleq qsimpleq force-pushed the feature-add-render.com-support branch from 166902a to 9d32089 Compare September 27, 2023 10:25
@qsimpleq
Copy link
Contributor Author

В принципе всё готово

@fey fey requested a review from corsicanec82 September 27, 2023 14:39
@qsimpleq
Copy link
Contributor Author

qsimpleq commented Oct 3, 2023

ping

@dzencot
Copy link

dzencot commented Oct 10, 2023

Коля пока в отпуске. На следующей неделе выйдет. Предлагаю дождаться его.

@qsimpleq
Copy link
Contributor Author

Ок

@fey
Copy link
Collaborator

fey commented Oct 16, 2023

Еще раз пинганул ребят, глянуть ПР. К сожалению, без еще одного разработческого ревью, не смогу просто так смержить.

@ola-9
Copy link

ola-9 commented Oct 23, 2023

@fey напоминаю :)

@fey
Copy link
Collaborator

fey commented Oct 23, 2023

в ММ ответил, здесь продублирую. @usernaimandrey проверял шаги, но где-то что-то пошло не так. В общем, ПР щас находится в работе у ребят. Они отпишутся по апдейтам.

* Go to YOUR_CUSTOM_NAME_PG PostgreSQL -> Info and copy `Internal Database URL`

* Go to YOUR_CUSTOM_NAME_CV app -> Environment
* Environment Variables, by one\
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Привет! Извини что так долго не приходили! вот здесь все таки стоит указать набор пременных окружения не обходимых для деплоя, если человек их будет через web интерфейс
EMAIL_FROM= любой email существующий в базе
EMAIL_SPECIAL_USER= любой email существующий в базе
HABR_ACCESS_TOKEN = любой набор символо
HOST= адрес хоста который выдается на рендере без указания протокола

еще надо бы добавить что пред деплоем нало сконфигурировать файл puma.rb для рендер, например как это описанно здесь https://render.com/docs/deploy-rails

Copy link
Contributor Author

@qsimpleq qsimpleq Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На бесплатном варианте нет доступа к консоли. Поэтому нужно все эти правки сразу в код вносить (я про puma.rb)

Copy link
Contributor Author

@qsimpleq qsimpleq Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переменные желательно всё же вынести в отдельный блок документации и нормально описать все имеющиеся.

А тут я перечислил только те, что необходимы для запуска на render.com

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Конкретно для Render.com я бы вынес необходимое в конфиге puma.rb в блок

if ENV['RENDER'].present?
  pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
  workers ENV.fetch("WEB_CONCURRENCY") { 4 }
  preload_app!
end

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А тут я перечислил только те, что необходимы для запуска на render.com

а без переменной HOST будет возможен запуск?) изначально когда генерится env там HOST=localhos, человек который будет разворачивать ее допустим не установит и у него при переходе по адресу который сгенерит рендер будет localhos открыватся

EMAIL_SPECIAL_USER - без вот этой пременной главня страница упадет с ошибкой,

HABR_ACCESS_TOKEN - без вот этой деплой упадет

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переменные желательно всё же вынести в отдельный блок документации и нормально описать все имеющиеся.

все в ваших руках это opensource)))

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Конкретно для Render.com я бы вынес необходимое в конфиге puma.rb в блок

if ENV['RENDER'].present?
  pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
  workers ENV.fetch("WEB_CONCURRENCY") { 4 }
  preload_app!
end

да можно так

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, без HOST не запустится. Всё верно, это я уже поправил.

Я имел ввиду вынести описание всех используемых переменных окружения в отдельный блок README
Незачем их в деплое для render описывать

Copy link
Contributor

@usernaimandrey usernaimandrey Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так я не предлагаю все только те что не обходимы для деплоя

bin/render-build.sh Outdated Show resolved Hide resolved
@usernaimandrey
Copy link
Contributor

и еще я не увидел конфигурационный файл render.yml, он не нужен? без него задеплоится?

@qsimpleq
Copy link
Contributor Author

Он предназначен для Blueprint только, и не нужен при обычном деплое.

@usernaimandrey
Copy link
Contributor

Он предназначен для Blueprint только, и не нужен при обычном деплое.

вообще как альтернативный вариант деплоя, но так как у нас немного другой путь то тогда да согласен

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Oct 24, 2023

Внёс изменения, сейчас всё красиво должно быть

На данный момент это уже достаточно безболезненный способ деплоя

# exit on error
set -o errexit

source "$(dirname $0)/render_lib.sh" && load_dotenv_file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

еще подскажи если тот кто будет деплоить добавит прерменные через web интерфейс этот запуск сработает?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Только если добавит файл с переменными там же в интерфейсе

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я думаю об этом надо было сказать и команду для старта прописать

Только если добавит файл с переменными там же в интерфейсе

вот тут не понял, знаю что там можно файлик подгрузить через интерфейс рендера, а твоим способом он как то по другому попадет?

Copy link
Contributor Author

@qsimpleq qsimpleq Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Файлы там складируются по пути /etc/secrets/filename, оттуда и загружаю

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Файлы там складируются по пути /etc/secrets/filename, оттуда и загружаю

так они там просто так же не берутся), их туда загрузить тот кто деплоит, а по инструкции это не очень понятно

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может сегодня напрямую спишемся минут на 5?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да можно, но только давай уже завтра можешь меня mattermost найти @farmacevt

@@ -22,7 +22,7 @@

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER']&.to_i&.positive?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можно просто ENV['RENDER'].present?, она же либо есть либо нет

config/puma.rb Outdated

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch('RAILS_ENV', 'development')

if ENV['RENDER']&.to_i&.positive?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ENV['RENDER'].present?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Перестраховаться и чтобы на 0 не реагировало, когда локально тестирую.

Мне нужно

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Перестраховаться и чтобы на 0 не реагировало, когда локально тестирую.

ну там 0 не будет она либо есть либо nil

Мне нужно

то что тестируется локально не обязательно же в репозитории должно быть

db/seeds.rb Outdated
@@ -7,3 +7,8 @@
#
# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
# Character.create(name: 'Luke', movie: movies.first)

if Rails.env.staging? && ENV['RENDER']&.to_i&.positive? && ENV['RENDER_LOAD_FIXTURES']&.to_i&.positive?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я думаю мы это будем использовать только на рендере и только на staging
if Rails.env.staging? && ENV['render'].present? будет достаточно

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отладка варианта production на рендер, как вариант, но можно и убрать

@usernaimandrey usernaimandrey merged commit 776852d into Hexlet:main Oct 25, 2023
1 check passed
usernaimandrey added a commit that referenced this pull request Oct 25, 2023
@qsimpleq
Copy link
Contributor Author

Может переоткрыть PR, а то через сутки после закрытия это сделать уже нельзя, если мне память не изменяет.

@qsimpleq
Copy link
Contributor Author

Или лучше новый открыть, где я историю почищу?

@fey
Copy link
Collaborator

fey commented Oct 25, 2023

@usernaimandrey а чего ревертнули?

@qsimpleq
Copy link
Contributor Author

qsimpleq commented Oct 25, 2023 via email

@usernaimandrey
Copy link
Contributor

@usernaimandrey а чего ревертнули?

@fey он посде деплоя упал с 503

@qsimpleq
Copy link
Contributor Author

Тут мой косяк, честно

Почему и просил подебажить ветку с платного аккаунта render

Я устал разбираться вслепую

@fey
Copy link
Collaborator

fey commented Oct 27, 2023

@qsimpleq тут будете продолжать разбираться с настрокой делоя? Или пока оставляете другим (Нам? :D) и беретесь за другую задачку?)

@qsimpleq
Copy link
Contributor Author

Работа идёт)

Вернулся к задаче

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants