私は、本番環境でapache + passengerを実行しているアプリを持っています。現在、イニシャライザでrufusスケジューラを初期化し、そのイニシャライザ内のdbから読み取るジョブを登録します。ウェイアパッチ/パッセンジャーの仕事は、スケジューラが複数回初期化され、重複したジョブをスケジュールする原因となる複数のプロセス/インスタンスを作成することです。レールでのRufusスケジューラの実装3
スケジューラがシングルトンオブジェクトであるようにこれを実装するのは正しいですか?
私は、本番環境でapache + passengerを実行しているアプリを持っています。現在、イニシャライザでrufusスケジューラを初期化し、そのイニシャライザ内のdbから読み取るジョブを登録します。ウェイアパッチ/パッセンジャーの仕事は、スケジューラが複数回初期化され、重複したジョブをスケジュールする原因となる複数のプロセス/インスタンスを作成することです。レールでのRufusスケジューラの実装3
スケジューラがシングルトンオブジェクトであるようにこれを実装するのは正しいですか?
Rufus Schedulerは、アプリケーション外の別のワーカープロセスとして実装することをお勧めします。
イニシャライザとして実装するのではなく、それを開始するRakeタスクを実装します。
次に、rake scheduler
を実行してバックグラウンドで起動してください。
ボーナス:アプリケーションに2つのプロセスが並んでいるため、アプリケーションの複数のプロセスを管理するためにForemanを使用します。あなたはProcfile
と呼ばれるファイルを作成することによってこれを行うことができます。
# Procfile
web: thin start -p 4242
scheduler: rake scheduler
はその後フォアマンとのあなたのアプリを起動します。これは、同時に両方のプロセスを起動します
$ foreman start
(最初gem install foreman
に確認してください)。