执行守护程序时出现“语法错误,意外kEND,期待$ end”

时间:2011-11-29 21:17:11

标签: ruby-on-rails daemon

更新:我在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

感谢您的帮助!

1 个答案:

答案 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

这将做几件事:

  • 您可以更轻松地单独测试ExtractedClass
  • 您的守护程序只关心它应该运行的频率以及它应该运行的内容。没有其他必要的逻辑。您现在拥有守护程序。
  • 你正在将逻辑从控制器中移出,也使它更薄(谷歌“瘦瘦的控制器胖模型”)