Деплой Rails-приложения на Locum

Фрей написал, 23.09.2014

Процесс деплоя приложения на хостинг от locum.ru мало отличается от обычного деплоя при помощи Capistrano. Из немногих нюансов здесь – 2 версия Capistrano, и… Вроде бы и все. Начнем с начала.

Шаг 1: подготовка приложения

Подготовка сводится к минимуму. После входа в личный кабинет на locum.ru следуем по цепочке ссылок “Услуги” -> “Проекты” -> “Подробнее” в нужном проекте. Если проект еще не создан, создаем его и выбираем нужную БД и Rails. После перехода по ссылке “Подробнее” опускаемся в самый низ страницы, на которую попали, и генерируем файл deploy.rb нажатием на кнопку “Сгенерировать”. Ctrl+A, Ctrl+C.

Далее идем в наше приложение и открываем его Gemfile. В группу production добавляем гем unicorn:

group :production do
  gem 'unicorn'
end

Добавим Capistrano в девелопмент-раздел:

group :development do
  gem 'capistrano', github: 'capistrano/capistrano', ref: '96a16'
end

Я довольно много времени потратил впустую, прежде чем выяснил, что именно с этим конкретным коммитом второй версии Capistrano не возникает проблем при деплое на Локум.

Устанавливаем гемы командой bundle install

Далее используем команду capify .

Это создаст необходимые файлы в папках проекта, в том числе config/deploy.rb, содержимое которого нам нужно заменить тем, что мы скопировали с сайта. Открываем этот самый файл, deploy.rb, и редактируем его под наш проект.

В моем случае репозиторий приложения находится на гитхабе, так что я закомментировал строку:

set :repository,      "ssh://#{user}@#{deploy_server}/home/#{user}/git/#{application}.git"

и вместо неё раскомментировал строку

# set :repository,    "[email protected]:username/project.git"

Разумеется, адрес при этом я сменил на свой.

Я думаю, что все знают, что хранить файлы с чувствительными к безопасности данными в репозитории неразумно. В первую очередь это касается файла database.yml. Если у вас пароли или ключи API хранятся где-то еще, повторите ниже следующую процедуру и для этих файлов.

Нам необходимо, чтобы в момент деплоя файл config/database.yml, расположенный в репозитории заменялся на тот, что мы храним на сервере(это я опишу чуть позже). Для этого мы раскомментируем в файле deploy.rb следующий блок:

after "deploy:update_code", :copy_database_config
task :copy_database_config, roles => :app do
  db_config = "#{shared_path}/database.yml"
  run "cp #{db_config} #{release_path}/config/database.yml"
end

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

Шаг 2: подготовка сервера

Сказано немного громко, поскольку это все же не ваш выделенный сервер, но не суть важно. Нам необходимо предоставить файл database.yml, который будет хранить в себе данные для доступа к базе данных. Для этого логинимся на хостинг по ssh, идем по следующему адресу: projects/вашеприложение/shared и создаем здесь файл database.yml. Открываем его, вписываем все необходимое для доступа к вашей БД, сохраняем и закрываем.

Так же в этой папке создайте директорию pids, иначе Capistrano при деплое будет ругаться и процесс деплоя не сможет успешно завершиться.

Шаг 3: деплой!

Собственно, это все. Идем в директорию нашего приложения и используем команду cap deploy для старта процесса деплоя. Если процесс завершился неудачно, читаем лог и ошибки, исправляем их и деплоим снова. В конце концов у вас все получится :)

Здесь стоит сказать, что Capistrano 2 уже довольно давно устарела и сейчас в ходу версия под номером 3. Не пожалейте своего времени и почитайте отличия от 2 версии, а так же попробуйте задеплоить свое приложение на Digital Ocean. При регистрации по реферальной ссылке вы получите 10 долларов на счет, а это, на минуточку, 2 месяца бесплатной аренды VPS с 512МБ оперативки и 20ГБ места. Рекомендую.