2011-11-29 49 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

嗨,傑夫。我用你的建議,但控制器代碼除外。除了守護進程外,我不需要訪問代碼。不知道爲什麼「ExtractedClass」會作爲未初始化的常量出現。 – Jay

+1

它很可能需要從守護進程中'需要'。要求'extracted_class' –

相關問題