Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Деплой Основы разработки на Ruby on Rails

Создание простого API

rails new simple-blog --api
cd ./simple-blog
bin/rails g scaffold post title body
bin/rails db:create
bin/rails db:migrate
bin/rails db:seed
curl http://127.0.0.1:3000/posts
# JSON ответ с постами

# Ручками создаём удаленный репозиторий на Github
# Либо можно сделать это с помощью утилиты Github cli https://cli.github.com/
# gh repo create
# https://github.com/mzsrn/mzsrn-simple-blog
git remote add origin https://github.com/username/simple-blog.git
git add *
git commit -m "initial commit"
git push --set-upstream origin main

Ручной деплой

ssh root@<server_ip>

# Дальнейшие команды выполняются на удалённом сервере

git clone https://github.com/username/simple-blog.git
bundle
bin/rails db:create
bin/rails db:migrate
bin/rails db:seed
# Ctrl+c прерывает текущий процесс
rails s -p 80 -b 0.0.0.0 # В браузере заходим по адресу http://<server_ip>/posts

# Выход с удалённой машины
logout # exit

Capistrano

# Дальнейшие команды выполняются на локальной машине
# После добавления Capistrano в зависимости и установки
cap -T
cap install
scp config/master.key root@<server_ip>://var/www/simple-blog/shared/config
cap staging deploy
cap staging deploy:seed
cap staging deploy:run

# Отобразить процесс, который занял порт 3000
lsof -wni tcp:3000

Использование Docker

# https://guides.hexlet.io/ru/docker/
# https://hub.docker.com/
docker -v
docker build -t <username>/simple-blog .
docker login -u <username>
docker push <username>/simple-blog


ssh root@<server_ip>
docker pull <username>/simple-blog
docker images
docker run --rm -p 3001:3001 <username>/simple-blog
docker stop <hash>
docker rm <hash>

Dockerfile

FROM ruby:3.0.1

WORKDIR /home/app

COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

RUN chmod +x scripts/start.sh

CMD ["./scripts/start.sh"]

start.sh

#!/bin/bash

if [ -e /home/app ]; then
  SEEDED_FILE=/home/app/.already_seeded
  pushd /home/app
  if [ -e $SEEDED_FILE ]; then
    rake db:migrate || { echo "Can't migrate database"; exit 1; }
  else
    bin/rails db:create
    bin/rails db:migrate || { echo "Can't migrate database"; exit 1; }
    bin/rails db:seed || { echo "Can't seed database"; exit 1; }
    echo 1 > $SEEDED_FILE
  fi

  rake tmp:clear || { echo "Can't clear cache"; }
  popd
fi

bin/rails server -p 3001 -b 0.0.0.0

Heroku

# https://devcenter.heroku.com/articles/heroku-cli
heroku login
heroku apps:create
git remote -v
# heroku  https://git.heroku.com/<app_name>.git (fetch)
# heroku  https://git.heroku.com/<app_name>.git (push)
# origin  git@github.com:<username/<repo_name>.git (fetch)
# origin  git@github.com:<username/<repo_name>.git (push)
# Добавление приложения в готовый репо (если приложение создано через web интерфейс)
либо heroku git:remote -a <app_name>
# Добавление сервиса базы данных Postgres к приложению на хероку
heroku addons:create heroku-postgresql:hobby-dev
# деплой выполняется по коммиту
git push heroku
# heroku run запускает команды в приложении Heroku
# heroku run bash
heroku run bin/rails db:migrate
heroku run bin/rails db:seed

# https://github.com/Hexlet/hexlet-cv - пример приложения, задеплоенного на Heroku
# Open: https://<app_name>.herokuapp.com/posts

Gemfile

# Gemfile

# Для хероку нужна версия ruby
ruby '3.0.2'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  # Для деплоя на Heroku sqlite3 не должен устанавливаться для продакшена
  gem 'sqlite3', '~> 1.4'
end

group :production do
  # Для продакшена
  gem 'pg'
end

Railway

Heroku стал платным, но есть и другие бесплатные сервисы с аналогичными возможностями. Рассмотрим для примера сервис Railway.

# https://docs.railway.app/develop/cli
# Установка Railway CLI
curl -fsSL https://railway.app/install.sh | sh

railway login

# Проект можно создать в интерфейсе сервиса
# Но также можно создать командой
railway init

# Связать текущий локальный проект с созданным в сервисе
railway link

# Выполнить деплой
railway up

# Добавить базы данных в проект
railway add

# Проверить установленные переменные окружения
railway vars

Самостоятельная работа

  • Зарегистрируйтесь на Railway

  • Установите Railway CLI

  • Склонируйте к себе проект hexlet-cv и запустите локально, следуя инструкциям в README

  • Создайте проект в Railway

    railway init
  • Задайте окружение для приложения в настройках проекта

    RAILS_ENV=production
    SECRET_KEY_BASE= # выполните команду rake secret для получения ключа
  • Создайте базу данных (Postgres). Вместе с ней будет создана переменная окружения DATABASE_URL, которая содержит данные для подключения к базе данных. Проверьте, что нужные переменные добавились в проект

    railway add
    railway vars
  • Выполните деплой приложения на Railway выполняется командой

    railway up
    # See http://<app_name>.up.railway.app

Дополнительные материалы

  1. Railway — PaaS сервис для хостинга приложений
  2. Гайд - Что такое деплой?
  3. Hexlet CV
  4. Документация Railway CLI
  5. Getting Started on Railway

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Разработчик на Ruby on Rails
Профессия
c опытом
Создание веб-приложений со скоростью света
2 февраля 5 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу