«синтаксическая ошибка, неожиданный kEND, ожидание $ end» при выполнении демона - PullRequest
0 голосов
/ 30 ноября 2011

ОБНОВЛЕНО: я использовал daemon_generator в приложении Rails 2.3 для создания демона. В соответствии с предложениями Джеффа Перрина ниже я создал следующую конфигурацию. Я обновил этот вопрос с окончательным решением для других, которые пытаются заставить демона работать.

В целях отладки я сократил файл 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 Ответ

1 голос
/ 30 ноября 2011

Независимо от того, можете ли вы вызвать метод контроллера из демона в вашем приложении 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 отдельно
  • Ваш демон просто обеспокоен тем, как часто он должен запускаться и что он должен запускать. Нет другой необходимой логики. Теперь у вас есть тонкий демон.
  • Вы вытаскиваете логику из контроллера, также делая ее тоньше (Google "тощий контроллер жирной модели")
...