重启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 

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

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

以下任务是我用于重启,停止和启动我的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 

希望这对你有所帮助。

也许这篇文章很有意思。

看到我的宝贝〜 用USR2重新启动Unicorn似乎没有重新加载production.rb设置

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

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

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

你应该试试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)