アップデート:私は私のためにこれを行うには、既存のライブラリ/宝石/プラグインを見つけることができませんでしたので、私はそれを自分で解決しようとすることを決めました。
私は解決策を考え出した後、ここに投稿することにしました。多分それは他人のために役立つでしょう。
DelayedJobは、これは私が書いたプラグインですプラグインシステム(私は最新のものに私の宝石のバージョンをアップグレードする必要がありました)
を持っています。私はそれが美のための賞を獲得するとは思わないが、それはトリックを行うようだ。私が何かばかげているとコメントを投稿してください。
それが生産/開発ENVをチェックしたときに、開発中のローカルDelayedJobスクリプトを実行しますので、私もそれを作りました。
class HerokuWorkerDelayedJobPlugin < Delayed::Plugin
callbacks do |lifecycle|
lifecycle.before(:enqueue) do |job, *args, &block|
Rails.logger.info "----before enqueue -----"
self.start
end
lifecycle.after(:enqueue) do |job, *args, &block|
Rails.logger.info "----after enqueue -----"
end
lifecycle.after(:invoke_job) do |job, *args, &block|
Rails.logger.info "----after invoke_job -----"
end
lifecycle.after(:perform) do |worker, job, *args, &block|
Rails.logger.info "----after perform-----"
self.stop
end
def self.start
if Rails.env.production?
self.set_heroku_workers 1
else
`script/delayed_job start`
end
end
def self.stop
if Rails.env.production?
self.set_heroku_workers 0
else
`script/delayed_job stop`
end
end
def self.set_heroku_workers(num)
heroku = PlatformAPI.connect_oauth(ENV['PLATFORM_API_OAUTH_TOKEN']) #https://github.com/heroku/platform-api
heroku.formation.update('my-app', 'worker', {quantity: num}) #https://devcenter.heroku.com/articles/platform-api-reference#formation
end
end
end
あなたの初期化子でこのようDelayedJobするプラグインを追加することをお勧めします:
Delayed::Worker.plugins << HerokuWorkerDelayedJobPlugin
Herokuのは、このためのサービスを持っている:https://devcenter.heroku.com/articles/scaling #autoscalingですが、プライベートスペースで実行されるパフォーマンス層のdynosとdynos用です。 – jdgray
私はほとんどの人の明白な解決策は、それを行うサービスを支払うことだと思います。 –