2011-11-29 2 views
0

ОБНОВЛЕНО: я использовал 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 

Моей Библиотека/демон/файл 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, это не то, что я бы рекомендовал. Я бы предположил, что вы извлекаете код, который в настоящее время находится в действии контроллера , в отдельный класс (который также может быть помещен в каталог/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 «тощую модель жира контроллер»)
+0

Спасибо за это! Теперь я строю его в свой код. Признаю это правильным ответом, когда я получу его работу. В то же время +1 для очень полезно! – Jay

+0

Привет, Джефф. Я использовал ваше предложение, за исключением кода контроллера. Мне не нужен доступ к коду, кроме демона. Не уверен, почему «ExtractedClass» появится как неинициализированная константа. – Jay

+1

Этого, скорее всего, потребуется «требуется» из вашего демона. require 'extract_class' –

Смежные вопросы