2013-08-11 24 views
5

通常、ユニコンは複数のRailsサーバープロセスを管理し、ResqueジョブランナーはおそらくWeb要求より少ないリソースを消費するため、1つのHeroku dynoで複数のresqueワーカーを実行できる必要があります。誰もがHeroku Dynoで複数のresque workerを実行していますか?

これまでこれまで成功している人はいますか?実際の作業員(つまりrake resque:work)のインスタンスを2つ(またはそれ以上)実行するProcfileが監督を務めるのは、簡単な方法です。

またはrake resque:workersまでですか? Resque自体は、そのメソッドを使用することをお勧めしません。これは、並列プロセスではなく、並列スレッドで作業者を開始するためです。

明らかに、これはI/Oバインドジョブでのみ意味があります。

答えて

8

foremanを使用して複数のプロセスを開始できます。あなたのGemfileに職長を追加し、2つのファイルを作成します。

Procfile

worker: bundle exec foreman start -f Procfile.workers 

Procfile.workers

worker_1: QUEUE=* bundle exec rake resque:work 
worker_2: QUEUE=* bundle exec rake resque:work 

同じ技術がウェブを実行するために使用することができますサーバーをいくつかのワーカーと一緒に使用します。

注:多くの州の成功は、このアプローチを使用してながら、私はほとんどが小さいためHerokuのインスタンス上のRAMの制限に実行するためのリスクのため、いくつかの実験の外にそれを使用することをお勧めしません。あなたがherokuサービスを支払った後は、とにかく専用のワーカーマシンを起動する方が簡単でしょう。

+0

恐ろしいです!私はちょうど同じテクニックを使用して[単一のワーカーdyno上の複数のdelayed_jobプロセス]を開始しました(http://stackoverflow.com/a/21568770/165673) – Yarin

+0

Herokuは 'Procfile.workers'ファイルによって開始されたプロセスを監視しますか?これは、resqueの 'COUNT = 2'設定を使用しない場合の中核的な問題です。 – ajsharma

+0

私は、労働者の一人が死んで、 "Procfile.workers"を実行している監督が子供のすべてを殺してそれ自身を終了すべきだとしたら、これは英雄に見えるようになります。私は上記の設定を問題なく問題なく実行していましたが、いくつかの時点ではherokuのデフォルト設定に移行することに決めました。 – radiospiel

1

this articleに基づいて、それは可能性がありますが、最も大きな問題は、子プロセスの1つが死んでも、Herokuが再起動できなくなることです。

+0

あなたの努力に感謝します。私は構築しやすく、おそらくより安定した方法を見つけました - 上記を参照してください – radiospiel

関連する問題