Правильный способ обновления кода на производстве? - PullRequest
0 голосов
/ 20 февраля 2012

Меня беспокоит необходимость остановить сервер, обновить код контрольной версией, а затем запустить

$ rake assets: прекомпилировать
, подождать и запустить сервер. Пользователи, которые будут в сети, когда я это сделаю, будут раздражены неработающим сайтом.

Есть ли лучший способ? Может быть, это способ перейти в «режим обслуживания», чтобы пользователи знали, что происходит?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

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

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

Если вы должны сделать это вручную (при условии, что ваш веб-сервер настроен для обслуживания статических файлов из общей папки), вы можете создать файл index.html в вашем общем каталоге и снова удалить его, когда вы закончили обновление.

2 голосов
/ 20 февраля 2012

Вы никогда не должны прерывать производственный сервер для развертывания. Развертывание должно быть плавным. Посмотрите на решение для развертывания, как capistrano .

1 голос
/ 20 февраля 2012

С помощью единорога и Capistrano вы можете изящно перезапустить приложение.

set(:unicorn_config) {"#{current_path}/config/unicorn.rb"}
set(:unicorn_pid) {"#{current_path}/../../shared/pids/unicorn.pid"}

namespace :deploy do
  task :start, :roles => :app, :except => { :no_release => true } do 
    run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec unicorn_rails -c #{unicorn_config} -E #{rails_env} -D"
  end

  task :stop, :roles => :app, :except => { :no_release => true } do 
    begin
      run "kill `cat #{unicorn_pid}`"
    rescue
      puts "Can't kill unicorn - probably not running"
    end  
  end

  task :graceful_stop, :roles => :app, :except => { :no_release => true } do
    run "kill -s QUIT `cat #{unicorn_pid}`"
  end

  task :reload, :roles => :app, :except => { :no_release => true } do
    run "kill -s USR2 `cat #{unicorn_pid}`"
  end

  task :restart, :roles => :app, :except => { :no_release => true } do
    run "if [ -f #{unicorn_pid} ]; then kill -USR2 `cat #{unicorn_pid}`; else cd #{deploy_to}/current && RAILS_ENV=#{rails_env} bundle exec unicorn_rails -c #{unicorn_config} -E #{rails_env} -D; fi"
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...