我正在运行独角兽,并试图使零停机时间重新开始工作。

到目前为止,所有这些都是令人敬畏的酱料,主过程分叉并启动了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是到另一个目录的软链接

... ...

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top