更新:我在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 / daemons / 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
感谢您的帮助!
答案 0 :(得分: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
这将做几件事: