重启Unicorn问题(capistrano)

时间:2012-01-26 15:52:39

标签: ruby-on-rails ruby-on-rails-3 capistrano unicorn

我在 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

但它不起作用。我的意思是该命令执行(它询问密码并且没有错误),但是配置文件中的所有更改仍然被忽略(即工作进程数或数据库设置)。

3 个答案:

答案 0 :(得分:18)

也许这是因为独角兽重启的方式。并非每个工人都立即重新启动。这样可以实现零停机和无任何请求。如果您想确定看到更改,请尝试停止然后启动应用程序。我有时不得不这样做。当然,你可能会失去一些请求。

以下任务是我用来重启,停止和启动我的unicorn服务器的。

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

希望这会对你有所帮助。

可能感兴趣this文章。

答案 1 :(得分:1)

看到我的宝贝〜 Restarting Unicorn with USR2 doesn't seem to reload production.rb settings

请记住:unicorn.rb中的工作目录应为:/ your / cap / directory / current

不是:File.expand_path(“../ ..”,FILE)

因为unicorn和linux软链接分叉错误:软链接无法正常工作。

答案 2 :(得分:0)

您应该尝试capistrano-unicorn,这就是我目前使用下面提到的默认挂钩。

设置

将库添加到Gemfile

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

并将其加载到部署脚本config/deploy.rb中:

ruby require 'capistrano-unicorn'

添加unicorn restart任务钩子:

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)