5

私は、本番環境でapache + passengerを実行しているアプリを持っています。現在、イニシャライザでrufusスケジューラを初期化し、そのイニシャライザ内のdbから読み取るジョブを登録します。ウェイアパッチ/パッセンジャーの仕事は、スケジューラが複数回初期化され、重複したジョブをスケジュールする原因となる複数のプロセス/インスタンスを作成することです。レールでのRufusスケジューラの実装3

スケジューラがシングルトンオブジェクトであるようにこれを実装するのは正しいですか?

答えて

4

Rufus Schedulerは、アプリケーション外の別のワーカープロセスとして実装することをお勧めします。

イニシャライザとして実装するのではなく、それを開始するRakeタスクを実装します。

​​

次に、rake schedulerを実行してバックグラウンドで起動してください。


ボーナス:アプリケーションに2つのプロセスが並んでいるため、アプリケーションの複数のプロセスを管理するためにForemanを使用します。あなたはProcfileと呼ばれるファイルを作成することによってこれを行うことができます。

# Procfile 
web:  thin start -p 4242 
scheduler: rake scheduler 

はその後フォアマンとのあなたのアプリを起動します。これは、同時に両方のプロセスを起動します

$ foreman start 

(最初gem install foremanに確認してください)。