3

HerokuでホストされているRailsアプリケーションがあり、毎週のデータ インポートが必要です。このタスクは管理者によって実行され、実行には約1 ~ 2 分かかります (計算時間)。Heroku では、 30 秒以上かかるジョブはタイムアウトになります。Heroku はジョブ キューを推奨していますが、8 分間の計算時間に対して月額 36.00 ドル (1 ワーカーの価格) を支払うのは適切ではないようです。いくつかの質問:

  1. 遅延ジョブが使用されたときにのみ料金を支払うことは可能ですか (つまり、管理者がデータ インポートをアップロードしているときにのみ遅延ジョブ サービスを起動します)。
  2. 遅延ジョブは必要ですか? タイムアウトがクライアントに表示されるだけなのか、実際の作業がキャンセルされたのかはわかりません。ドキュメントにはオプションとして「何もしない」が記載されていますが、これが何を意味するのかはわかりません。

ありがとう!

4

4 に答える 4

8

HireFireをチェックしてみてください。

HireFire は、Heroku での遅延ジョブとレスキュー ワーカーを自動的に「雇用」および「解雇」します (別名「スケーリング」)。キュー ジョブがない場合、HireFire はすべてのワーカーを起動 (シャットダウン) します。キューに入れられたジョブがある場合は、ワーカーを雇用 (スピンアップ) します。雇用される労働者の数は、キューに入れられたジョブの量によって異なります (比率は構成できます)。

于 2011-05-09T20:49:50.900 に答える
2

遅延ジョブが使用された場合にのみ料金を支払うことは可能ですか(つまり、管理者がデータインポートをアップロードしている場合にのみ遅延ジョブサービスを起動します)。

これは、herokuサポートに向けるべき質問です。

遅れた仕事は必要ですか?タイムアウトがクライアントに表示されただけなのか、実際の作業がキャンセルされたのかわかりません。ドキュメントにはオプションとして「アクションを実行しない」と記載されていますが、これがどのような意味を持つのかわかりません。

毎週実行する場合は、遅延しているものよりもcronジョブである可能性が高くなります。毎日のcronアドオンを使用できます(無料です)。次に、というファイルを作成しますlib/tasks/cron.rake

task :cron => :environment do
  if Time.now.strftime('%w').to_i == 0 # run every sunday
    puts "Importing..."
    #... run import
    puts "done."
  end
end

ソース

このタスクはherokuから毎日実行されるため、週単位で実行する場合は曜日を確認する必要があります。

于 2010-07-09T08:32:25.397 に答える
1

Delayed Job ワーカーは秒単位で課金されるため、1 つをスピンアップしてタスクを処理し、完了したら heroku API を介してオフにすることができます。

于 2010-09-08T06:18:02.703 に答える
0

テスト後、タイムアウトによって長時間実行されるタスクの完了が妨げられないことがわかりました (結果がユーザーに表示されるだけです)。最終的に電子メール通知を追加し、タイムアウトが発生するようにしました。スレッドリクエストを調べましたが、Rails でのサポートは不安定なようです。

于 2010-07-09T22:25:26.963 に答える