2011-06-29 12 views
10

Uygulamamda kayıt olurken kullanıcılara gönderilecek bir bildirim e-postasını geciktirmeye çalışıyorum. E-postalar, InitMailer'u aradığım ActionMailer kullanılarak gönderilir. İşleri geciktirmeye çalıştığım yol, collectiveidea'nın delayed_jobhttps://github.com/collectiveidea/delayed_job. Bunun için ben yöntemini initial_email tanımlayan sonra handle_asynchronously belirtmek görebilirsiniz: AncakRails 3.0 ActionMailer bir eşzamansız olarak çalıştırmak için bir gecikme nasıl kullanılır? Karşılaşılan ArgumentErrors

class InitMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def initial_email(user) 
    @user = user 
    @url = "http://www.blahblahblah.com" 
    mail(:to => user.email, 
     :subject => "Welcome to my website!" 
     ) 
    end 

    handle_asynchronously :initial_email 
end 

, benim günlük dosyasında "delayed_job.log" bir argüman hatayla karşılaştığınızda:

Bilgin
Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5 
failed attempts 

, e-postası Ayrıca, ben gecikmeden kodumu kurmak, e-postalar w

@user = InitUser.new(params[:init_user]) 
InitMailer.delay.initial_email(@user) 

: hattını kullanan bir denetleyici gönderilen ere sorunum olmadan gönderildi (benim uygulamayı yavaşlatarak gmail sunucularını bekletmesi durumu hariç)

Burada hatalara neden oluyorsunuz? Gecikmeli postayı düzgün bir şekilde göndermek için nasıl alabilirim?

cevap

10

Rails3'ün postalayıcıları uygulama şekli nedeniyle, delayed_jobs için bazı olağandışı çözümler vardır. Örneğin, bu posta geciktirmek için gördük, size postaları (nedense) bu bildirimin durumunda, yöntem tanımı sonra handle_asynchronously yazmak zorunda tipik iken

ExampleMailer.delay.example(user) 

gecikmiş ameliyatı mı önler yazma Çalışmaktan

Yani bu kodda, tamamen beyanı damla:

class InitMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def initial_email(user) 
    @user = user 
    @url = "http://www.blahblahblah.com" 
    mail(:to => user.email, 
      :subject => "Welcome to my website!" 
     ) 
    end 

    #No handle_asynchronously needed here 
end 
+0

teşekkür ederiz! Bu benim sıkıntılarımın cevabı. Keşke yoU gibi biriyle çalışsaydım! – geb2011

+0

Müthiş. Sadece bunu çözmek için 2 gün boşa harcadım (ayrıca bir arızaya neden olan bir engelle ilgili bir sorun vardı ve Gmail, geliştirme ortamımdan e-postaları kabul etmek istemiyordu). – Clay

+0

Geliştirme ortamı için bile, Gmail yerine e-posta göndermek için Mandrill'i kullanırdım. – Dean

İlgili konular