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

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

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

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

kill -s USR2 `cat /www/app/shared/pids/unicorn.pid` 

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

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

preload_app在我们的unicorn配置文件中设置为true

有什么想法吗?

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

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

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

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

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

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

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

例如:

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

……

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