2013-03-24 2 views
1

У меня есть следующий код. Его задача - отправить электронное письмо на основе данных, данных через браузер (используя Sinatra). Он отправляет электронное письмо по адресу, указанному через 20 секунд. Когда я запускаю программу, она мгновенно отправляет электронное письмо, не дожидаясь времени. Может ли кто-нибудь помочь мне с этой проблемой.Ruby: Resque quees мгновенно

require 'rubygems' 
require 'sinatra' 
require 'pony' 
require 'resque' 
require 'resque_scheduler' 
require 'active_support/time' 

Resque.redis = 'localhost:6379' 
Resque::Scheduler.dynamic = true 

def sendMail 

Pony.mail({ 
    :to => '[email protected]', 
    :via => :smtp, 
    :via_options => { 
    :address    => 'smtp.gmail.com', 
    :port     => '587', 
    :enable_starttls_auto => true, 
    :user_name   => 'EMAIL', 
    :password    => 'PASSWD', 
    :authentication  => :plain, # :plain, :login, :cram_md5, no auth by default 
    :domain    => "localhost.localdomain" # the HELO domain provided by the   client to the server 
    }, 
    :body => 'roar' 
}) 

end 


class Roar 
    def self.queue; :app; end 
end 

class ChildJob 

@message 
@email 

def setMess(mes) 
    @message = mes 
end 

def setMail(mail) 
    @email = mail 
end 


def self.queue; :app; sendMail; end 

def self.perform 
    Pony.mail({ 
    :to => '[email protected]', 
    :via => :smtp, 
    :via_options => { 
    :address    => 'smtp.gmail.com', 
    :port     => '587', 
    :enable_starttls_auto => true, 
    :user_name   => '[email protected]', 
    :password    => 'PASSWD', 
    :authentication  => :plain, # :plain, :login, :cram_md5, no auth by default 
    :domain    => "localhost.localdomain" # the HELO domain provided by the client to the server 
    }, 
    :body => 'HAHAH' 
}) 
end 

end 



get '/:email/:message/:time' do 

email = params[:email] 
message = params[:message] 
time = params[:time] 
time = time.to_i 

Resque.enqueue_in(20.seconds, ChildJob) 

end 
+0

Не является ли эта проблема проблемой? 'def self.queue; :приложение; Отправить письмо; end' Похоже, вы пытаетесь установить очередь по умолчанию, но на самом деле вы используете 'sendMail' (': app' ничего не делает). – iain

+0

Но не будет ли метод 'self.queue' запускать внутри внутри очереди? – user1938700

+0

': приложение 'является символом, что делает эта линия? Ничего. Линия _last_ метода важна, так как это возвращаемое значение, но поскольку 'sendMail' - последняя строка': app' по существу ничего не делает. – iain

ответ

0

:app Держите символ в self.queue, как это то, что задает очередь по умолчанию (см this StackOverflow answer). Поместите sendMail в метод self.perform, так как это то, что вы хотите сделать, когда расписание выполнено. например

def self.queue 
    :app 
end 

def self.perform 
    sendMail 
end 
Смежные вопросы