3

Herokuで継続的なワーカープロセスを実行するための最良の方法は何ですか?私のアプリケーションはこのプロセスを24時間年中無休で実行する必要があるため、delayed_jobまたは他のキューはやり過ぎのようです。Herokuコンソールを使用してプロセスを手動でトリガーでき、それを切り離して単独で実行することもできます。

できれば、この単一のメソッド呼び出しだけをdynoに割り当てて、アプリの起動時に追加のworker-dynoを起動してから、単一のメソッドを呼び出してハミングを開始するようにします。しかし、そのメソッド呼び出しを割り当てる方法がわかりませんか?

私は遅延ジョブを使用することができ、それはすべてを解決しますが、私の必要性は、即時(呼び出されたとき)でスケジュールされていない単一のアクティビティが必要なようです。しかし、おそらくこれが唯一の方法です。

4

1 に答える 1

3

Procfile で、追加のワーカー ジョブ用に別のプロセスを追加できます

# Procfile
web: ...
worker: ...
collector: bundle exec ruby stats_collector.rb -p $PORT # or any other command

その後、このプロセスを でスケーリングできます$ heroku ps:scale collector=1。個別に実行され、デプロイのたびに停止および再起動されます。したがって、アプリが実行することは、このような長時間実行されるプロセスを使用するためにいつでも中断されないようにする必要があると言えます。

中断によって問題が発生する可能性がある場合 (たとえば、1 回だけ実行したい処理が再起動すると 2 回実行される場合)、メッセージをキューに入れる Sidekiq などを使用する「従来の」バックグラウンド ワーカーがより安全なソリューションになる可能性があります。

アップデート

Rails アプリのコンテキストで長時間実行されるコードを非対話的に実行する場合は、rails runnerコマンドを使用できます。

# Procfile
web: ...
worker: ...
collector: bundle exec rails runner 'MyModel.my_long_running_job'
于 2012-10-10T17:15:24.467 に答える