2011-11-29 14 views
0

更新:Rails 2.3アプリケーションでdaemon_generatorを使用してデーモンを作成しました。下のJeff Perrinの提案では、以下の設定を作成しました。私はこの問題を、デーモンを動かすのに苦労している他の人の最終的な解決策で更新しました。デバッグの目的のために

は、私がこれまでの私のlib/pulse_check_email.rbファイルをカット:

class PulseCheckEmail 
    def self.send_pulse_check_mail 
     # removed all conditional statements and other "stuff" to debug 
    end 
end 

私のlib /デーモン/ mailer.rbファイル:あなたの助けのための

require File.dirname(__FILE__) + "/../../config/environment" 
require 'pulse_check_email' 

while($running) do 
    PulseCheckEmail.send_pulse_check_mail 
    sleep 300 # 5 min 
end 

感謝を!

答えて

1

Railsアプリケーションのデーモンからコントローラメソッドを呼び出すかどうかにかかわらず、これは私が推奨するものではありません。私は、コントローラのsend_mailアクションに現在あるコードを別のクラスに抽出することをお勧めします(これは/ libディレクトリにも置くことができます)。次に、デーモンとコントローラの両方からそのコードを呼び出すことができます。

class YourController < ApplicationController 
    def create 
    do_stuff 
    send_email 
    end 

    def send_email 
    ExtractedClass.do_stuff(params) 
    end 
end 

#new class in lib/extracted_class.rb 
class ExtractedClass 
    def self.do_stuff(params) 
    #put the code that was previously in the send_email 
    #function of your controller 
    end 
end 

#in lib/daemons/mailer.rb 
while($running) do 
    ExtractedClass.do_stuff(params) 
    sleep 300 # 5 min 
end 

これは、いくつかのことを行います:

  • をあなたは、より簡単にあなたのデーモンが実行する必要があり、それが何を実行している必要がありますどのくらいの頻度でちょうど心配です
  • 別途ExtractedClassをテストすることができます。他に必要なロジックはありません。 の薄いデーモンがあります。
  • あなたはこのため
+0

おかげで(「スキニーコントローラ脂肪モデルを」グーグル)シンナーそれを作るにも、コントローラの外にロジックを移動しています!私は今すぐ自分のコードに組み込んでいます。私はそれが働くとき正解としてこれを認めます。その間、+1が非常に役立ちます! – Jay

+0

こんにちはJeff。私はあなたの提案をコントローラコードを除いて使用しました。私はデーモン以外のコードにアクセスする必要はありません。なぜ "ExtractedClass"が初期化されていない定数になるのか不明です。 – Jay

+1

あなたのデーモンの中では、おそらく '必須'にする必要があります。 'extracted_class'が必要です –

関連する問題