2012-01-16 70 views
5

我有一个RubyOnRails项目,并将它与Unicorn一起部署在Ubuntu服务器上的nginx上。如何在不杀死主进程的情况下重新加载独角兽?

我需要重新启动Unicorn,如果我更改了一个配置文件,但是当我杀死Unicorn的主进程并使用bundle exec重新启动它时,它会使我的站点关闭。

有没有什么办法可以让Unicorn在不杀死进程的情况下使用新文件进行工作?

回答

8

在我Capistrano的deploy.rb我:

desc "Zero-downtime restart of Unicorn" 
task :restart, :except => { :no_release => true } do 
    run "kill -s USR2 unicorn_pid" 
end 

这 “Lighting fast, zero-downtime deployments with git, capistrano, nginx and Unicorn” 是有据可查的。

+0

我已经取得了一些进展与您的意见,谢谢 但现在我有新的错误。当我输入“cap restart”并输入我的密码时,我有以下: '** [out :: app_name] $ rvm_path(/root/.rvm/)不存在。 *** [err :: app_name]/usr/local/rvm/bin/rvm-shell:第57行:找不到rvm:命令 *** [err :: app_name]错误:RVM无法使用'ruby -1.9.2-p290'' 如果我能理解谷歌的结果,我需要将我的rvm_path var更改为“/ usr/local/rvm/bin”(它确实存在目录),但我无法找到它任何地方。 – leitasat 2012-01-17 01:04:23

+0

重启你编码的脚本?如果出现这种情况,您可以在脚本中添加一个'rvm use 1.9.2',使其知道您需要使用的rvm版本。否则,请将答案标记为正确并为rvm问题打开一个新的答案。我很乐意提供帮助。 – tommasop 2012-01-17 08:17:42

+0

好的,我已经修复了我的rvm(没有必要的宝石),现在看起来capistrano当然会执行我的命令,但是独角兽并没有考虑到我在配置文件中的更改。 (例如,工作进程或数据库设置的数量) – leitasat 2012-01-17 15:58:40

0

这两个答案,包括接受的答案都是不好的。

http://unicorn.bogomips.org/SIGNALS.html说发送一个HUP到主进程。

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

问题不在于如何RELOAD(这是HUP),而是如何优雅地重启已经是USR2 – tommasop 2013-04-23 09:34:22

相关问题