【问题标题】:Is establish_connection on worker boot still required on Rails 6 and Puma?Rails 6 和 Puma 是否仍需要在工作人员启动时建立连接?
【发布时间】:2020-10-09 00:16:50
【问题描述】:

我在 Heroku 上读到,对于 Rails(他们说 4+),当我使用多个工作人员并预加载应用程序时,我应该向 Puma 添加以下指令:

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

但是,我同时拥有preload_app! 和多个workers,但没有该代码……而且该应用程序似乎运行良好。

我错过了什么吗?这还需要吗?目的是什么?

【问题讨论】:

    标签: ruby-on-rails heroku puma ruby-on-rails-6


    【解决方案1】:

    假设您运行的是 Rails 5.2+,则不再需要此 establish_connection 调用。

    Puma 维护的最佳实践插件的配置代码在 Heroku(它位于 here)上的 Puma 配置当前包括以下内容:

    # Not necessary in Rails 5.2+, see https://github.com/rails/rails/pull/29807
    if defined?(::ActiveRecord) && defined?(::ActiveRecord::Base) && Gem::Version.new(Rails.version) < Gem::Version.new('5.2.0')
        c.before_fork { ActiveRecord::Base.connection_pool.disconnect! }
        c.on_worker_boot { ActiveRecord::Base.establish_connection }
    end
    

    注意这里的评论。对链接的 PR 和它链接到我的一些 PR 进行更多挖掘,导致 PR 实际上消除了对这些东西的需求:https://github.com/rails/rails/pull/31241。在这个 PR 中,明确提出了这个问题,

    这是否意味着如果我们在 Rails 5.2.0 之前的 puma.rb 文件中有现有的 before_fork 和 on_worker_boot 块,我们现在可以在升级到 Rails 5.2.0 后简单地删除这些块?

    我的朋友,答案是……

    是的。 (当然,假设他们正在进行 AR 连接管理。) 他们离开那里是完全安全的,所以升级指南中没有提到,但他们应该不再需要了。

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 2018-10-08
      • 2020-03-04
      • 2017-06-23
      • 2018-12-22
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多