在生产中运行puma worker,但不在Development中运行

时间:2016-06-17 13:58:18

标签: 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"

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

这对于制作非常有用,但我不想在工作中使用webrick。我尝试在环境检查中包装工作者特定的代码,但这打破了美洲狮DSL。在开发中以非聚集模式运行puma的任何想法?

3 个答案:

答案 0 :(得分:4)

puma配置文件中未定义

Rails,因此此处无法使用Rails.env,但RACK_ENV可以。

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

答案 1 :(得分:1)

在看到我接受的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

答案 2 :(得分:0)

查看文档中的Configuration部分。

我所做的是在config/puma/production.rb上设置生产配置,所以在制作时你会用puma -C config/puma/production.rb(或者你在prod上运行它)和开发时运行puma rails server不会使用该配置

相关问题