2010-11-30 75 views
3

Je suis en 2.1.1, Rails 3, et ayant un temps heckuva obtenir la gemme delayed_job de travail. Si je supprime handle_asynchronously sur un mailer, tout fonctionne bien ... mais si je le remets, j'obtiens:Rails: Delayed Job -> ne pas décrocher « de » champ lors de l'envoi de courrier asynchrone

undefined la méthode `name 'pour nil: NilClass (où' nom 'vient de @ contact.name ... qui fonctionne correctement lorsque handle_asynchronously est désactivé).

Si je déshabille toutes les informations de modèle @Contact, je reçois:

« Un expéditeur (Return-Path, expéditeurs ou) requis pour envoyer un message »?

Est-ce moi faire quelque chose de mal ou d'un bug sorta? Code pertinent ci-dessous ([email protected] remplacé par l'adresse e-mail légitime)

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

    def contact_mail(contact) 
    @contact = contact 
    mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => '[email protected]', :content_type => 'text/plain') 
    end 

    handle_asynchronously :contact_mail, :run_at => Proc.new { 2.seconds.from_now } 
end 

Toute suggestion très appréciée.

Répondre

2

Essayez d'appeler la méthode avec l'adresse e-mail réelle:

def contact_mail(contact_email) 
    mail(:to => ENV['MANAGER_EMAIL'], :subject => 'Delayed Job Test', :from => contact_email, :content_type => 'text/plain') 
end 

C'est la seule chose que je peux penser à ce qui pourrait aider sans voir votre code actuel. Votre erreur vous dit vous appelez nom sur un objet nul, mais je ne vois nulle part où vous appelez .name ...

0

J'ai eu le même problème et résolu en supprimant cette ligne:

default :from => "[email protected]" 

Mais je ne sais pas pourquoi il est écrasé avec cette ligne ..

0

Rails 3 mailers

en raison de la façon dont les expéditeurs sont mis en œuvre dans Rails 3, nous avons dû faire un peu de travail autour pour obtenir delayed_job travailler.

# without delayed_job 
Notifier.signup(@user).deliver 

# with delayed_job 
Notifier.delay.signup(@user) 

Supprimez la méthode .deliver pour la faire fonctionner. Ce n'est pas idéal, mais il est le meilleur que nous pouvions faire pour l'instant

https://github.com/collectiveidea/delayed_job#rails-3-mailers

+0

l'option handle_asynchronously ne fonctionne pas non plus – wachichornia