puma的文档表明可以使用USR1信号启动分阶段重启。但我不知道如何使用它来进行滚动重启。如果我有目录/ home / abc / rails_app和/ home / abc / rails_app_updated包含我的代码的副本以及新的更改,是否有一种方法可以告诉puma我的新代码在重新启动时的位置?我找不到任何确定的东西。
答案 0 :(得分:1)
Puma在启动时会加载你的代码,之后你可以删除rails应用程序并且事情仍然可以继续工作(基本上)。所以你可以更新代码,Puma甚至都不会注意到。发送USR1信号的作用是让puma重新加载(新)代码,同时优雅地处理现有连接。因此,不需要有两个单独的目录,您可以更新代码。
如果你确实需要分开目录,你可以只有一个符号链接的目录,指向你想要当前的代码和Puma使用的代码(capistrano使用这个策略,它有一个符号链接'当前'指向在最新版本)。然后发送puma USR1,它将从给定的目录重新加载代码。
如果您需要更多指示,请告诉我。
编辑:Probabaly我不是很精确。 Puma实际上并没有处理文件的(重新)加载,这是由Rails处理的(Puma只是启动Rack应用程序,或者在USR1信号上,将重启应用程序)。在开发模式下,Rails将在每个请求上重新加载文件,这在更改代码时很方便。在生产时,这些设置通常适用(来自config/environments/production.rb
):
# Code is not reloaded between requests.
config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
更多详情in the rails guides。
如果你真的想要走下去,可以看一下cache_classes
在导轨源中的确切做法,但我对此并不熟悉。
尼尔斯