2011-06-23 11 views
1

私はapache + passengerで実行中のアプリケーションを持っていて、イニシャライザのrufusスケジューラを初期化してからジョブをスケジュールします。レールのイニシャライザがレールで複数回実行されている

rufusスケジューラ内で重複したジョブをスケジュールするアプリケーションの起動後、イニシャライザが複数回実行されているようです。

なぜイニシャライザが再起動せずに何度も実行されているのか分かりません。

+0

どのプロセスid? – ed1t

+0

あなたはLinuxのpidを意味しますか? – ed1t

+0

複数のapache2 pidがあります:ルート9382 1 0 16:58? 00:00:00/usr/sbin/apache2 -k start www-data 9383 9382 0 16:58? 00:00:00/usr/sbin/apache2 -k start www-data 9398 9382 0 16:58? 00:00:00/usr/sbin/apache2 -k start www-data 9399 9382 0 16:58? 00:00:00/usr/sbin/apache2 -k start – ed1t

答えて

2

イニシャライザは適切な場所ではありません。各initializarは、Webサーバーが実行するすべてのプロセスに対して実行されます。つまり、あなたのapacheがあなたのレールアプリケーションへの接続を受け入れる4プロセスを開始すると、イニシャライザは4回実行されます。

簡単な解決策は、展開戦略の一環としてレーキタスクを使用することです。

+1

スケジューラスレッドをどのように初期化するのですか?私はこれを行う初期化プログラムの一部です:$ scheduler = Rufus :: Scheduler.start_newこれはおそらく、アプリケーション全体のグローバル変数を使用する悪い方法だと思います。どうすればそれを使うことができますか?私は配備プロセスを持たない小さなアプリだから、アプリを再起動するたびに手動でrakeタスクを実行するか、または再起動してすぐにrakeタスクを実行するシェルスクリプトを用意する必要があります。 – ed1t

+0

スクリプトの解決策は問題ありません。 –

関連する問題