Render.com Это новая платформа, а также предлагающаяся услуга, которая является великой альтернативой Heroku. Вместо того, чтобы думать с точки зрения «приложений», как делает Heroku; У рендера есть концепция «Услуги». Итак, приложение вашего рельсов будет услугой; Ваша база данных будет другая служба; Redis будет еще одна услуга и т. Д. Услуги также могут быть потенциально совместно между несколькими приложениями.
Любые нетривиальные рельсы приложение в наши дни нужны Фон задания и популярные рамки для этого — Sidekiq Отказ Sidekiq использует Redis в качестве хранилища данных. Это означает, что нам нужно развернуть 4 сервиса для рендера для запуска нашего приложения:
- Rails Web Service.
- Sidekiq фоновый сервис
- PostgreSQL База данных
- Редис
Render поддерживает «инфраструктуру как код», поэтому мы собираемся определить эти услуги в файле yaml, чтобы он отслеживал Гит
наряду с нашим кодом приложения. Срежи Ruby поддерживаются в результате которых поддерживаются, и у них также есть управляемое предложение PostgreSQL базы данных. Для чего-либо еще нам нужно использовать документ Docker, поэтому использование Redis — крошечный бит.
На момент написания, Render работает над управляемым Redis, предлагающим Отказ Когда это в прямом эфире, это должно быть легче развернуть и управлять службой Redis.
Render поддерживает 3 типов обслуживания:
- Веб-сервис [ подвергается интернету через
HTTPS.
на порту 80 Несомненно - Частное обслуживание [ подвергается только всем вашим другим услугам Несомненно
- Фоновой рабочий [ не подвергается воздействию сети вообще Несомненно
Рельсы на визуализации
Мы разверним веб-приложение Rails в качестве веб-службы, работник Sidekiq как фоновый работник и Redis в качестве частного обслуживания, используя Визуализация поддерживается Dockerfile
Отказ
Во-первых, нам нужно обновить нашу базу данных и конфигурации PUMA для производства. Следуйте за Этот раздел из Руководства по развертыванию рельсов Render а затем вернуться к этому посту.
Затем нам нужно добавить сценарий сборки, который будет запущен, когда приложение развернуто. Создайте файл под названием Render-build.sh
В вашем Bin
каталог и добавить следующее содержимое:
#!/usr/bin/env bash # exit on error set -o errexit bundle install bundle exec rake assets:precompile bundle exec rake assets:clean bundle exec rake db:migrate
Этот скрипт также из визуализации Руководство по развертыванию рельсов Отказ
Убедитесь, что скрипт исполняется исполняемым путем выполнения следующей команды:
chmod a+x bin/render-build.sh
Наконец, мы создаем нашу спецификацию инфраструктуры. В вашем Root Project создайте файл под названием Render.yaml
и вставить следующее:
services: - type: web name: myapp-web env: ruby region: frankfurt # or oregon plan: starter numInstances: 1 buildCommand: ./bin/render-build.sh startCommand: domains: - example.com # replace with your domain name envVars: - key: DATABASE_URL fromDatabase: name: myapp-db property: connectionString - key: REDIS_HOST fromService: name: myapp-redis type: pserv property: hostport - key: RAILS_MASTER_KEY sync: false - type: worker name: myapp-sidekiq env: ruby region: frankfurt # or oregon plan: starter buildCommand: bundle install && bundle exec rake assets:precompile startCommand: envVars: - key: DATABASE_URL fromDatabase: name: myapp-db property: connectionString - key: REDIS_HOST fromService: name: myapp-redis type: pserv property: hostport - key: RAILS_MASTER_KEY sync: false - type: pserv name: myapp-redis env: docker region: frankfurt # or oregon repo: https://github.com/render-examples/redis.git numInstances: 1 disk: name: myapp-redis-data mountPath: /var/lib/redis sizeGB: 1 databases: - name: myapp-db plan: starter region: frankfurt # or oregon
Полная спецификация YAML Render — Доступен здесь Отказ
Большая часть вышеуказанного файла должна быть самоснабжением. Я рекомендую изменять имена сервисов на что-то, что конкретно для вашего приложения. Единственный сложный бит предоставляет Redis_url
Окружающая среда переменная для наших железнодорожных и сервисов Sidekiq. В отличие от PostgreSQL, который является управляемым сервисом, Redis — это общее частное обслуживание; Таким образом, единственное имя и порт хоста предоставляется нам в переменных среда на платформе Render. Это означает, что нам нужно добавить Redis://
Директива протокола к URL на нашем собственном.
Я обнаружил, что самый простой способ сделать это, было интерполировать Redis_Host
Переменная окружающей среды, которая Render дает нам создать Redis_url
Переменная в startcommand
для наших услуг. Вы можете, как это сделано в рельсах и услугах Sidekiq выше.
Если вы запустите консоль Rails в приборной панели Render, вам нужно будет вызывать его, используя Redis_URL = "Redis://$ {Redis_host}" Bundle Exec Rails Console
В противном случае процесс консоли не сможет найти службу Redis.
И, наконец, все, что нам нужно сделать, это подключить этот файл YAML для рендера. Перейти к приборной панели Render, нажмите Новый В правом верхнем углу и выберите План Отказ
Следуйте инструкциям на экране, чтобы подключить репозиторий, и вы должны быть хорошими, чтобы пойти!
Заключение
Я использую вышеуказанный подход в моем приложении: Scattergun Отказ Пока я действительно доволен этим. Я взволнован, чтобы увидеть, какая команда Render в магазине на будущее и лично я планирую использовать их для всех моих проектов в обозримом будущем.
дальнейшее чтение
- Руководство по развертыванию рельсов
- Руководство по развертыванию Sidekiq
- Руководство рендеринга для развертывания постоянного Redis
- Render против Heroku
Scattergun — это самый простой способ собрать адреса электронной почты на вашей посадочной странице и отправлять электронные письма в свой список рассылки. Начните бесплатно Действительно
Оригинал: «https://dev.to/ayushn21/deploy-rails-and-sidekiq-to-rendercom-using-yaml-346»