私はRails 3.2.16アプリを開発しており、無料のWeb dynoが1つあり、ワーカーdynoがないHeroku開発アカウントにデプロイしています。(有料) ワーカー dyno が本当に必要かどうかを判断しようとしています。
アプリはさまざまなメールを送信します。私はdelayed_job_active_recordを使用してそれらをキューに入れ、送信します。
また、毎分通知数を確認する必要があります。そのために、rufus-scheduler を使用しています。
rufus-scheduler は、Heroku Web dyno内でバックグラウンド タスク/スレッドを実行できるようです。
一方、delayed_job で見つけたものはすべて、別のワーカー プロセスが必要であることを示しています。なんで?rufus-scheduler が Web dyno 内でデーモンを実行できるのに、delayed_job が同じことを実行できないのはなぜですか?
毎分タスクを実行し、delayed_jobs を処理するために以下をテストしましたが、単一の Heroku Web dyno 内で動作するようです。
config/initializers/rufus-scheduler.rb
require 'rufus-scheduler'
require 'delayed/command'
s = Rufus::Scheduler.singleton
s.every '1m', :overlap => false do # Every minute
Rails.logger.info ">> #{Time.now}: rufus-scheduler task started"
# Check for pending notifications and queue to delayed_job
User.send_pending_notifications
# work off delayed_jobs without a separate worker process
Delayed::Worker.new.work_off
end
これは非常に明白に思えるので、何かが足りないのではないかと思いますか? これは、別のワーカー プロセスの複雑さと費用を追加せずに、delayed_job キューを処理する許容可能な方法ですか?
アップデート
@jmettraux が指摘しているように、Heroku は非アクティブな Web dyno を 1 時間後にアイドル状態にします。まだ設定していませんが、さまざまなキープアライブ方法のいずれかを使用して、スリープ状態にならないようにしていると仮定しましょう: Heroku のアイドリングを防ぐ簡単な方法は? .