Процесс деплоя приложения на хостинг от 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ГБ места. Рекомендую.