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

时间:2019-07-10 19:06:22

标签: ruby-on-rails nginx server hotpatching

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

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

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

1 个答案:

答案 0 :(得分:0)

购买企业版Nginx不会帮助您。 Nginx与Phusion Passenger / Unicorn / Thin结合使用。零停机部署不应该在Nginx中实施,而应该在乘客/独角兽中实施。我更喜欢使用Unicorn,它是免费的,功能强大的,并且支持零停机时间部署。

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

我强烈建议不要修改服务器上的文件。 se Capistrano / Mina进行部署。手动更改文件可能会中断生产,并且肯定会造成巨大的停机时间。

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/