Unicorn重启/升级不起作用

时间:2011-12-12 11:56:58

标签: unicorn

以下链接到我的独角兽的init脚本。 https://gist.github.com/1466775

重启命令对我来说从未奏效。我在每次部署后使用升级来重启unicorn。但是每当有新的宝石被添加等重大变化时,升级都不会起作用。最近,我用airbrake替换了hoptoad gem,并且错误地说'未初始化的恒定Airbrake(NameError)'。但当我停下来再次开始独角兽时,它运作良好。问题出在init脚本或其不同的问题上吗?

感谢。

4 个答案:

答案 0 :(得分:12)

根据您的init脚本,“/ bin / init.d / unicorn restart”将HUP信号发送到unicorn主进程

------裁剪

restart|reload)
    sig HUP && echo reloaded OK && exit 0
    echo >&2 "Couldn't reload, starting '$CMD' instead"
    su - $USER -c "$CMD"

-----裁剪

这就是HUP对独角兽进程的作用:

重新加载配置文件并正常重启所有工作人员。如果“preload_app”指令为false(默认值),则工作人员还会在重新启动时获取任何应用程序代码更改。如果“preload_app”为true,则应用程序代码更改将不起作用。

您正在寻找的是USR2信号,您的升级参数是独角兽已经在做什么!

USR2信号重新执行正在运行的二进制文件。一旦确认孩子已启动并正在运行,应将单独的QUIT发送到原始流程。

答案 1 :(得分:10)

我有一个非常类似的问题,最后found the solution

之前我查看了日志,但显然没有看到(Bundler::GemfileNotFound)错误。事实证明,对早期版本有旧的引用,一旦gem文件发生变化,新的master会无声地失败。尾巴-f你的独角兽日志,看看会发生什么。我的问题都是根据我的unicorn.rb中的以下链接修复的。

 before_exec do |server|
    ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
 end 

答案 2 :(得分:2)

我有同样的问题,但我使用的rbenv是按用户安装的。 我使用了init script

我发现自从我的rbenv按用户安装后,我需要稍微改变一下:

CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

用这个:

CMD="cd $APP_ROOT; ~/.rbenv/bin/rbenv exec bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"

希望它会对你有所帮助!

P.S。或者其他人,因为它是一个老问题=)

答案 3 :(得分:0)

我通过从

更改我的unicorn init.d脚本来修复此问题
CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

到此:

CMD="cd $APP_ROOT; BUNDLE_GEMFILE=$APP_ROOT/Gemfile bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E staging"

这似乎指向每个新版本上的新bundle gem文件。 从this merge request

中获取灵感