3

Rails で記述され、Heroku にデプロイされたアプリケーションがあります。以前は 1 つの Web dyno で作業していましたが、今日アプリを公開しました。トラフィックが非常に大きいため、4 つの Web dyno と 1 つの worker dyno に増やすことにしました。私がそれを行うと、なぜいつもheroku psそれが表示されるのかわかりません:

Process   State           Command                            
--------  --------------  ---------------------------------  
web.1     up for 22s      bundle exec rails server -p $PORT  
web.2     up for 36s      bundle exec rails server -p $PORT  
web.3     up for 25s      bundle exec rails server -p $PORT  
web.4     up for 22s      bundle exec rails server -p $PORT  
worker.1  crashed for 7s  bundle exec rake jobs:work

の直後にワーカー dyno がクラッシュしheroku scale worker=1ます。ログは次のようになります。

2012-03-11T23:12:18+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work`
2012-03-11T23:12:19+00:00 heroku[worker.1]: State changed from starting to up
2012-03-11T23:12:22+00:00 app[worker.1]: rake aborted!
2012-03-11T23:12:22+00:00 app[worker.1]: Don't know how to build task 'jobs:work'
2012-03-11T23:12:22+00:00 app[worker.1]: 
2012-03-11T23:12:22+00:00 app[worker.1]: (See full trace by running task with --trace)
2012-03-11T23:12:23+00:00 heroku[worker.1]: Process exited with status 1
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from up to crashed
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from crashed to created
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from created to starting
2012-03-11T23:12:32+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work`
2012-03-11T23:12:32+00:00 heroku[worker.1]: State changed from starting to up
2012-03-11T23:12:36+00:00 app[worker.1]: rake aborted!
2012-03-11T23:12:36+00:00 app[worker.1]: Don't know how to build task 'jobs:work'
2012-03-11T23:12:36+00:00 app[worker.1]: 
2012-03-11T23:12:36+00:00 app[worker.1]: (See full trace by running task with --trace)
2012-03-11T23:12:37+00:00 heroku[worker.1]: Process exited with status 1
2012-03-11T23:12:37+00:00 heroku[worker.1]: State changed from up to crashed

それでおしまい。理由はわかりますか?Web dyno は正常に動作しています。ワーカー dyno を使用するには、アプリで何かを構成する必要がありますか?

また、heroku プラットフォームを Web ダイノとワーカー dyno に分割する背後にあるロジックは何ですか? 私はドキュメントを何度も読みましたが、ストレージ制限などがある世界で育ったので、それを理解するポイントをまだ逃していると思います.

4

1 に答える 1

2

ワーカーはバックグラウンド処理に使用されます。たとえば、電子メールの送信、一部の Web サービスからのデータの取得などです。一般に、ワーカーは時間がかかるタスクに使用され、ユーザーがページを表示するまで待たされることは望ましくありません。Web dyno を使用して 10 件程度の電子メールを送信している場合、その時間はユーザーの要求に応答していないため、多くのユーザーを処理できないため、これはパフォーマンスのために使用する必要があると考えられます。

Taks はキューに入れる必要があり、ワーカーはそのキューをチェックしてそのジョブを完了させる必要があります。

したがって、ジョブが定義されていないためにワーカーがクラッシュし、そのジョブのキューを待つことができます。ジョブを設定してタスクをキューに入れる方法については、この gem を確認してください。

https://github.com/defunkt/resque

ワーカーを使用できるもう 1 つのことは、cron ジョブなどのタスクをスケジュールすることです。これは、そのための宝石です。

https://github.com/javan/whenever

これもRailsCastsのビデオを見ることを強くお勧めします

http://railscasts.com/episodes/171-delayed-job

http://railscasts.com/episodes/271-resque

于 2012-03-11T23:39:22.103 に答える