5

私は本番環境でApache + Passengerで実行されているアプリを持っています。現在、イニシャライザで rufus スケジューラを初期化し、そのイニシャライザでデータベースから読み取るジョブを登録しています。apache/passenger が機能する方法は、アプリの複数のプロセス/インスタンスを作成することです。これにより、スケジューラが複数回初期化され、重複したジョブがスケジュールされます。

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

4

1 に答える 1

4

おそらく、Rufus Scheduler をアプリケーション外の別のワーカー プロセスとして実装したいと思うでしょう。

それをイニシャライザとして配置する代わりに、それを開始する Rake タスクを実装します。

# Rakefile
desc "Starts the Scheduler worker"
task :scheduler do
  require 'path/to/your/scheduler/file'

  scheduler.join
end

次に、実行rake schedulerしてバックグラウンドで開始します。


おまけ: アプリには 2 つのプロセスが必要になるため、Foreman を使用してアプリケーションの複数のプロセスを管理します。これを行うには、次のファイルを作成しますProcfile

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

次に、Foreman を使用してアプリを起動します (必ずgem install foreman最初に実行してください) 。

$ foreman start

これにより、両方のプロセスが同時に呼び出されます。

于 2011-08-05T05:16:56.237 に答える