2011-11-29 35 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' –

相关问题