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,那就太好了。

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

4

1 回答 1

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 应用程序中定义了不同的类型,您应该能够解析它以获得工人总数......或特定类型工人的计数)

于 2013-08-04T10:30:20.247 回答