5

私は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 のアイドリングを防ぐ簡単な方法は? .

4

1 に答える 1

1

これによれば

https://blog.heroku.com/archives/2013/6/20/app_sleeping_on_heroku

dyno が 1 時間リクエストを処理しない場合、dyno はスリープ状態になります。dyno なし、スケジューリングなし。

これも役立ちます: https://devcenter.heroku.com/articles/clock-processes-ruby

于 2014-04-10T20:50:46.050 に答える