Перезапустите проблему Unicorn (capistrano)

У меня есть следующие настройки в deploy.rb для перезапуска сервера:

namespace :deploy do
  task :restart do
    run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -USR2     \`cat #{unicorn_pid}\`; else cd #{deploy_to}/current && bundle exec unicorn -c #{unicorn_conf} -    E #{rails_env} -D; fi"
  end
end

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


person leitasat    schedule 26.01.2012    source источник


Ответы (3)


Возможно, это из-за того, как перезапускается единорог. Не каждый воркер перезапускается сразу. Это сделано для того, чтобы можно было иметь нулевое время простоя и не терять запросы. Если вы хотите точно увидеть свои изменения, попробуйте вместо этого остановить, а затем запустить приложение. Мне приходилось делать это несколько раз. Конечно, вы потенциально потеряете какой-то запрос.

Следующие задачи — это то, что я использую для перезапуска, остановки и запуска своего сервера единорога.

desc "Zero-downtime restart of Unicorn"
task :restart, :except => { :no_release => true } do
  run "kill -s USR2 `cat #{shared_path}/pids/unicorn.pid`"
end

desc "Start unicorn"
task :start, :except => { :no_release => true } do
  run "cd #{current_path} ; bundle exec unicorn_rails -c config/unicorn.rb -D -E production"
end

desc "Stop unicorn"
task :stop, :except => { :no_release => true } do
  run "kill -s QUIT `cat #{shared_path}/pids/unicorn.pid`"
end

Надеюсь, это поможет вам.

Возможно, это статья представляет интерес.

person Godisemo    schedule 27.01.2012
comment
У меня та же проблема, и у меня работает только 1 рабочий, так что я думаю, что этого не может быть. - person asymmetric; 14.12.2012

посмотри здесь, мой ребенок ~ не перезагружаются настройки production.rb

Имейте в виду, что: ваш рабочий каталог в unicorn.rb должен быть: /your/cap/directory/current

НЕ быть: File.expand_path("../..", FILE)

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

person fantaxy025025    schedule 15.10.2013

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

Настраивать

Добавьте библиотеку в свой Gemfile:

ruby group :development do gem 'capistrano-unicorn', :require => false end

И загрузите его в свой скрипт развертывания config/deploy.rb:

ruby require 'capistrano-unicorn'

Добавьте хук задачи перезапуска единорога:

ruby after 'deploy:restart', 'unicorn:reload' # app IS NOT preloaded after 'deploy:restart', 'unicorn:restart' # app preloaded after 'deploy:restart', 'unicorn:duplicate' # before_fork hook implemented (zero downtime deployments)

person pcanterini    schedule 26.09.2013