运行 puma 工人在生产中,但不在开发中
Run puma workers in Production, but not in 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_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
查看文档中的 Configuration 部分。
我所做的是在 config/puma/production.rb
上设置生产配置,所以在生产中你会 运行 puma 和 puma -C config/puma/production.rb
(或者你 运行 它在产品上) 并且在开发中,rails server
不会使用该配置
我是运行以下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_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
查看文档中的 Configuration 部分。
我所做的是在 config/puma/production.rb
上设置生产配置,所以在生产中你会 运行 puma 和 puma -C config/puma/production.rb
(或者你 运行 它在产品上) 并且在开发中,rails server
不会使用该配置