【问题标题】:Run puma workers in Production, but not in Development在生产中运行 puma 工人,但不在开发中
【发布时间】:2016-10-19 09:46:56
【问题描述】:

我正在运行以下 puma 配置

threads_count = Integer(ENV["DB_POOL"] || ENV["MAX_THREADS"] || 15)
threads threads_count, threads_count
workers 3
preload_app!

rackup      DefaultRackup
port        ENV["PORT"]     || 3000
environment ENV["RACK_ENV"] || "development"

on_worker_boot do
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end
end

before_fork do
  ActiveRecord::Base.connection_pool.disconnect!
end

它非常适合生产,但我不想增加 3 名工人或在开发中使用 webrick。我尝试将特定于工作人员的代码包装在环境检查中,但这会破坏 puma DSL。在开发中以非集群模式运行 puma 有什么想法吗?

【问题讨论】:

  • “打破 puma DSL” – 你能说得更具体点吗?该文件看起来像 Ruby 语法。
  • 抱歉,我的意思是当我通过一个关于 workers 的错误将它包裹在 check puma 中时。

标签: ruby-on-rails ruby puma devops


【解决方案1】:

puma配置文件中没有定义Rails,所以这里不能使用Rails.env,但是RACK_ENV是可以的。

workers(ENV["RACK_ENV"] == "production" ? 3 : 0)

【讨论】:

  • 我不知道您可以将工作人员设置为 0。太棒了,谢谢!
【解决方案2】:

在看到我接受的 scorix 的答案之前,我想出了一个可行的解决方案,但我最终得到了一个稍微不同的解决方案。这允许您设置工作人员数量,例如,我可以在 staging 中运行 1 个,在生产中运行 3 个。

threads_count = Integer(ENV["DB_POOL"] || ENV["MAX_THREADS"] || 15)
threads threads_count, threads_count
rackup      DefaultRackup
port        ENV["PORT"]     || 3000
environment ENV["RACK_ENV"] || "development"

if ENV["RACK_ENV"] == "production"
  workers ENV.fetch("WEB_CONCURRENCY") { 3 }
  preload_app!
  ActiveSupport.on_load(:active_record) do
    ActiveRecord::Base.establish_connection
  end
  before_fork do
    ActiveRecord::Base.connection_pool.disconnect!
  end
end

【讨论】:

    【解决方案3】:

    查看文档中的Configuration 部分。

    我所做的是在config/puma/production.rb 上设置生产配置,因此在生产环境中,您将使用puma -C config/puma/production.rb 运行puma(或者在生产环境中运行它),而在开发环境中,rails server 不会使用该配置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2023-01-11
      • 2015-08-05
      • 1970-01-01
      相关资源
      最近更新 更多