用USR2重新启动Unicorn似乎不会重新加载production.rb设置
-
28-10-2019 - |
题
我正在运行独角兽,并试图使零停机时间重新开始工作。
到目前为止,所有这些都是令人敬畏的酱料,主过程分叉并启动了4个新工人,然后杀死了旧工人,每个人都很高兴。
我们的脚本发送以下命令以重新启动unicorn: 通用标签
表面上一切看起来都很不错,但是事实证明,独角兽并没有重新加载production.rb。(每次部署时,我们都将config.action_controller.asset_host
值更改为其中包含我们预编译的资产的新CDN容器端点。)
以这种方式重新启动独角兽之后,资产宿主仍指向旧版本。进行 real 重新启动(即:停止主进程,然后从头开始再次启动独角兽),以获取新的配置更改。
在我们的独角兽配置文件中将preload_app
设置为true
。
有什么想法吗?
解决方案
我的猜测是,您的独角兽将在旧的生产目录中重新启动,而不是在新的生产目录中重新启动-换句话说,如果您在unicorn.rb中的工作目录是<capistrano_directory>/current
,则需要确保符号链接发生在您之前尝试重新启动独角兽。
这将解释为什么手动停止和启动它们的原因:大概是在进行部署后,这导致它们在正确的目录中启动。
在部署过程中,何时重新启动独角兽?您应该确保在新发行目录被符号链接为当前符号之后发送USR2信号。
如果这没有帮助,请把您的unicorn.rb和deploy.rb放下;它将使调试此问题变得容易得多。
其他提示
请记住: 您在unicorn.rb中的工作目录应为: / your / cap / directory / current
否为: File.expand_path(“ ../ ..”,文件)
由于独角兽和linux软链接分叉错误:软链接无法正常工作。
例如:
cd current #current是到另一个目录的软链接
... ...
当我们得到工作目录时,我们得到的是绝对路径而不是“当前”路径中的路径