2013-08-03 93 views
1

为了正确地扩展我们的sidekiq工人到我们的数据库池的大小运行工人的数量,我们在配置想出了一个小公式你能确定你的应用程序

sidekiq.rb

Sidekiq.configure_server do |config| 
    config.options[:concurrency] = ((ENV['DB_POOL'] || 5).to_i - 1)/workers 
end 

def workers 
    ... the number of workers configured for our project ... 
    (ENV['HEROKU_WORKERS'] || 1).to_i 
end 

我们正在手动设置HEROKU_WORKERS,但如果在应用程序内部有一种方法来询问Heroku API,那将是很可爱的。

模所有可能发生的事情(工人上升或下降,改变工人数量等),这似乎使我们摆脱了最初的问题;我们的工作人员将消耗全部的数据库池连接,然后在启动时崩溃。

+0

我假设你的工人有一个他们在'Procfile'中的行。如果是这样的话,Heroku API可以帮助你。例如,查看https://devcenter.heroku.com/articles/platform-api-reference#dyno或更好的https://devcenter.heroku.com/articles/platform-api-reference#formation –

+0

我希望我不必将API密钥传递给我的应用程序。这感觉就像一个安全漏洞。 –

+1

你不需要,它确实是不可取的。正确的模式是使用Heroku config var。 –

回答

1

heroku-api宝石应该为您提供这个。 https://github.com/heroku/heroku.rb

你应该在这里找到您的API密钥:https://dashboard.heroku.com/account

require 'heroku-api' 
heroku = Heroku::API.new(api_key: API_KEY) 

当前进程的总数:

heroku.get_ps('heroku-app-name').body.count 

(你应该能够解析它来获取职工的总数。如果你在你的Procfile/Heroku应用程序中定义了不同的种类,那么你需要一个特定类型的工作人员数)

相关问题