【问题标题】:During hot patch in nginx ruby on rails can I reload the specific file instead of whole application by server restart?在 nginx ruby​​ on rails 的热补丁期间,我可以通过服务器重启重新加载特定文件而不是整个应用程序吗?
【发布时间】:2019-11-20 11:04:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails nginx server hotpatching


    【解决方案1】:

    购买企业版的 Nginx 对你没有帮助。 Nginx 与 Phusion Passenger/Unicorn/Thin 搭配使用。零停机部署不应该在 Nginx 中实现,而应该在Passenger/Unicorn 中实现。我更喜欢使用 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/

    【讨论】:

    • 感谢您的宝贵时间,我们正在使用乘客,目前不打算使用独角兽。那么有什么办法可以加快服务器启动时间呢?
    • 我对Passenger知之甚少,很多年前我上次用过,但似乎你需要Passenger Enterprise(不是Nginx Enterprise)来实现零停机部署(此功能在Unicorn中免费提供) . Ruby 是一种慢速语言。 Rails 应用程序启动缓慢。你对此无能为力。您可以进行调整,即时加载一些文件,而不是在应用程序启动期间缓存所有文件,但这会降低您的生产性能,这就是我建议不要这样做的原因。如果您需要快速启动,则需要切换到 Elixir 或 Go。
    • 红宝石的缓慢也让我很生气。现在我正在学习 Elixir,我很惊讶它与 Ruby 相比的速度有多快。
    猜你喜欢
    • 2019-02-17
    • 2019-07-25
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多