在 Rails 6 和 Puma 上仍然需要 worker boot 上的establish_connection吗?



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

on_worker_boot do
ActiveRecord::Base.establish_connection
end

但是,如果没有该代码,我既有preload_app!又有多个workers......该应用程序似乎工作正常。

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

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

Puma维护的插件的最佳实践Puma在Heroku上的配置(它位于此处(目前包括以下内容:

# 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连接管理。 它们离开那里是完全安全的,因此升级指南中没有提到它们,但它们应该不再是必需的。

相关内容

  • 没有找到相关文章

最新更新