2013-08-03 147 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應用程序中定義了不同的種類,那麼你需要一個特定類型的工作人員數)

相關問題