2009-09-03 9 views
4

私は、レールアプリケーションのさまざまな部分にdelayed_jobを使用しようとしています。問題は、アプリの複数のインスタンスが実行されているが、特定のジョブ(たとえばアップロードを処理中)をローカルワーカーが実行する必要がある場合、他のワーカーが実行することによって利益を得ることができるということです。複数のマシン間でdelayed_jobを使用して、ローカルで実行する必要のあるタスクがある

地元/非地方の仕事の種類に適したアプローチをお勧めする人はいますか?

+0

すべてのアプリケーションインスタンスで共有ファイルシステムを使用できますか? – Kenny

答えて

8

私はちょうどthe latest issue of Rails Magazineの "delayed_jobでのバックグラウンド処理"を読んで、あなたが組み込みのジョブ優先度システムを悪用する可能性があると私に思いました。

作業者の最小および最大優先度を指定できます。今、あなたの特別なローカル専用ジョブは42の優先順位を持っている場合は、この作業員はジョブのみを処理します...

rake jobs:work RAILS_ENV=production MIN_PRIORITY=42 MAX_PRIORITY=42 

この労働者は、これらの特別なローカル専用ジョブ以外のすべてを処理する一方で:

rake jobs:work RAILS_ENV=production MIN_PRIORITY=0 MAX_PRIORITY=10 

これは、必要なものを実現するのに十分な柔軟性を備えている必要があります。しかし、私は今日この機能について学んだだけで、自分自身でそれを試していないことを自認していますので、YMMV!

+0

提案していただきありがとうございます。私はこれを試してみる。もちろん、複数のローカルワーカー(各インスタンスに1つ)を持たせるには、各インスタンスに特定の優先度を設定する必要がありますが、それは確かに実行可能です。 –

0

アーキテクチャ上、すべてのジョブを任意のクライアントから実行できるように手順を実行する方が理にかなっています。

アップロードを処理しているとお伝えしましたが、どのクライアントからもアクセスできるようにディレクトリを共有できますか?

+0

それは可能性がありますが、私は大規模なアップロードをネットワーク上で処理しないようにしたいと思います。 –

関連する問題