2011-01-07 12 views
4

アプリケーションをあるサーバーにホストし、別のサーバーのジョブをキューに入れることはできますか?Rails:別のサーバーでバックグラウンドジョブを実行できますか?

可能な例:

  1. 二つの異なるEC2インスタンス、メインサーバと1とキューイングサービスを有する第二。

  2. ホストHerokuのでアプリやキューイングサービス

でEC2インスタンスを使用することも可能ということですか?

ありがとうございます。

答えて

13

はい、間違いありません。私は、私が働いているところで、delayed_jobをセットアップしました。

それを動作させるための要件が​​いくつかあります:

  1. サーバがクロックを同期している必要があります。これは通常、サーバーのタイムゾーンがすべて同じに設定されている限り問題にはなりません。
  2. サーバーはすべて同じデータベースにアクセスする必要があります。それを行うには

、あなたは、単にサーバ(つ以上の場合、またはすべての)同じ両方のアプリケーションを持っている、とあなたがジョブを処理したい方、サーバー上の労働者を起動します。どちらのサーバーも依然としてジョブをキューに入れることができますが、実行中のワーカーのみが実際にジョブを処理します。

たとえば、interfaceというサーバーと、dbのサーバーと、複数のworkerのサーバーがあります。 interfaceサーバは、Apache/Passenger経由でアプリケーションを提供し、Railsアプリケーションをdbサーバに接続します。 workersには同じアプリケーションがありますが、Apacheは実行されていないため、httpでアプリケーションにアクセスすることはできません。一方、彼らは、遅延作業を実行している労働者をしています。一般的なシナリオでは、interfaceサーバーはdbにジョブをキューイングし、workerサーバーでジョブを処理します。

アプリケーションの物理ファイル(添付ファイル、ログファイル、ダウンロードしたXMLなど)に頼っている場合は、S3のような解決策が必要になるでしょう。これは、個々のサーバーに実際のファイルがない可能性があるためです。たとえば、Web上のサーバーにプロファイル画像をアップロードする場合、そのファイルはそのサーバーに保存される可能性があります。プロファイルピクチャのサイズを変更する別のサーバーがある場合、イメージはワーカーサーバー上に存在しません。

+0

お返事ありがとうございます。私は今自分のサーバーを使ってそれを行う方法を理解しています。 Herokuと私のサーバーを使ってそれを行う方法はありますか? – donald

+0

本当にHerokuが外部サーバーからデータベースに直接アクセスできるかどうかによって異なります。私は考えていない*ので、答えは "いいえ"となります。 – vonconrad

+0

''マウント '?それは信頼できる解決策ではありませんか? – mdesantis

5

もう1つの実行可能なオプションを提供するだけです.EC2内のクラウドサーバーの弾力的なファームに完全に依存するIronWorkerのような新しいワーカーサービスを使用できます。

このようにすると、ジョブの実行をキューに入れたりスケジューリングしたりできます。インフラストラクチャを気にすることなく、複数のサーバーにまたがる多数のスレッドで並列化されます。

データベースと同じ扱いですが、外部からアクセスできる必要があります。

完全開示:私はIWのビルドを手助けしました。

関連する問題