为了将我们的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 :(得分:1)
heroku-api gem应该为您提供此服务。 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应用程序中定义了不同的种类,您应该能够解析此数据以获取工作人员总数...或特定类型工作人员的数量)