在 rails 上 nginx ruby 的热补丁期间,我可以通过服务器重新启动来重新加载特定文件而不是整个应用程序吗?

During hot patch in nginx ruby on rails can I reload the specific file instead of whole application by server restart?

有时由于 error/bug(主要在单个文件中),我必须对生产代码进行热修补,但我在开发环境中将 eager_loadcache_classes 设置为 true。由于这两个原因,服务器加载大约需要 2 分半钟,热补丁也是如此。

我的最终目标是减少服务器加载时间。一种方法是为应用程序启动时不需要的 gem 添加 'require: false',然后在需要时加载它们。但是是否可以只重新加载更新的文件而不是重新启动整个应用程序?

我正在使用 nginx 免费服务器(企业版 nginx 可能是一个提供零停机时间的解决方案,但在该版本中是否可行?)

买企业版的Nginx对你没有帮助。 Nginx 与 Phusion Passenger/Unicorn/Thin 配对使用。零宕机部署不应该在 Nginx 中实现,而应该在 Passenger/Unicorn 中实现。我更喜欢用Unicorn,它免费,功能强大,支持零停机部署。

在生产环境中Rails需要将每个文件快速加载并缓存到服务器 HTTP 请求,我建议不要更改此行为,更改它会减慢您的生产速度。

强烈建议不要修改服务器上的文件。 se Capistrano/Mina 用于部署。更改文件 by-hand 可能会中断生产,您肯定会有大量停机时间。

Capistrano 可以帮助您使用一条命令部署项目。如果出现问题,Capistrano 还可以帮助您快速恢复到以前的版本。

https://www.digitalocean.com/community/tutorials/how-to-set-up-zero-downtime-rails-deploys-using-puma-and-foreman

https://www.devroom.io/2011/09/14/lighting-fast-zero-downtime-deployments-with-git-capistrano-nginx-and-unicorn/