使用USR2重新启动Unicorn似乎不会重新加载production.rb设置

Mic*_*ins 24 ruby deployment ruby-on-rails unicorn ruby-on-rails-3

我正在运行独角兽,我正试图让零停机重启工作.

到目前为止,这是一个非常棒的酱油,主要的过程分叉和启动4个新工人,然后杀死旧的,每个人都很高兴.

我们的脚本发送以下命令来重启unicorn:

kill -s USR2 `cat /www/app/shared/pids/unicorn.pid`
Run Code Online (Sandbox Code Playgroud)

从表面上看,一切看起来都很棒,但事实证明,独角兽并没有重新加载生产.rb.(每次部署时,我们都会将config.action_controller.asset_host值更改为新的CDN容器端点,其中包含预编译的资产).

以这种方式重新启动独角兽之后,资产主机仍然指向旧版本.进行真正的重启(即:停止主进程,然后从头开始再次启动独角兽)选择新的配置更改.

preload_app被设置为true在我们麒麟配置文件.

有什么想法吗?

Ver*_*cus 24

我的猜测是你的独角兽正在旧的生产目录而不是新的生产目录中重新启动 - 换句话说,如果你的工作目录在unicorn.rb中<capistrano_directory>/current,你需要确保符号链接在你尝试重新启动之前发生独角兽.

这可以解释为什么手动停止和启动它们:你正在进行后部署,这可能会导致它们在正确的目录中启动.

在部署过程中,您是否重新启动独角兽?在将新版本目录符号链接为当前后,应确保发送USR2信号.

如果这没有帮助,请点击你的unicorn.rb和deploy.rb; 它会让调试这个问题变得容易多了.

  • 间接回答了这个问题 - 谢谢!符号链接完成后重新启动,但是你让我找对了.unicorn配置的工作目录设置为`File.expand`语句,该语句解析为符号链接的目标,而不是符号链接本身.我把它改成了符号链接的绝对路径,它完美地运行. (5认同)

小智 7

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

不是:File.expand_path("../ ..",FILE)

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

例如:

cd current #current是到另一个目录的软链接

......

当我们得到我们的工作目录时,我们得到的绝对路径不是"当前"的路径