Ruby on rails 在生产中运行彪马工人,但不在开发中运行

Ruby on rails 在生产中运行彪马工人,但不在开发中运行,ruby-on-rails,ruby,puma,devops,Ruby On Rails,Ruby,Puma,Devops,我正在运行以下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"

我正在运行以下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有什么想法吗?

Rails
未在puma配置文件中定义,因此这里不能使用
Rails.env
,但
RACK\u env
可以

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

在看到scorix的答案之前,我找到了一个可行的解决方案,我接受了这个答案,但最终我得到了一个稍微不同的解决方案。这允许您设置工作计数,因此我可以在暂存中运行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
查看文档中的零件


我所做的是在
config/puma/production.rb
上设置生产配置,所以在生产中,您可以使用
puma-C config/puma/production.rb运行puma(或者在prod上运行它),而在开发中,
rails服务器
不会使用该配置,“这会破坏puma的DSL”-您能更具体一点吗?该文件看起来像Ruby语法。抱歉,我的意思是,当我通过一个关于
workers
的错误将其包装在check puma中时,我不知道您可以将workers设置为0。酷,谢谢!