2015-04-01 13 views
5

innen Controller:Mailer-Methode wird nicht aufgerufen?

def update 
    @user.update({approved: true}) 
    UserMailer.send_approved_mail(@user) 
    redirect_to(root_url) 
end 

innen user_mailer.rb

class UserMailer < Devise::Mailer 
    def send_approved_mail(user) 
    @resource = user 
    email_body = render "user_activated_mail" 
    if @resource.valid? 
    client = Postmark::ApiClient.new(ENV["POSTMARK_API_KEY"]) 
    client.deliver(from: ENV["POSTMARK_SIGNATURE"], 
     to: @resource.email, subject: "User Activation information.", 
     tag: 'account-activated', :content_type => "text/html", 
     html_body: email_body) 
    end 
    end 
end 

in Schienen 4.1.0 obige Verfahren in der Steuerung wird, gesendet und E-Mail bezeichnet wird, aber in den Schienen 4.2 das Mailer Verfahrens in der Steuerung wird nicht aufgerufen, aber wenn es von der Rails-Konsole aus aufgerufen wird, funktioniert es. Ich habe alle notwendigen Einstellungen für Poststempel api und in Konfigurationsdateien vorgenommen. Die einzige Sache ist in Schienen 4.1.0 Mailer innerhalb des Controllers wird aufgerufen, aber in Schienen 4.2 funktioniert es nicht aber funktioniert, wenn von der Schiene Konsole aufgerufen. Was ist der genaue Grund wirklich kann es nicht herausfinden.

Antwort

5

Das Verhalten, das Sie hier auffällt, ist der neue Standard in Rails 4.2 eingeführt:

Mit der Einführung von Active Job und #deliver_later ... der Aufruf der Instanzmethoden (auf einem Mailer) aufgeschoben wird, bis Entweder delivernow oder deliver_later wird aufgerufen.

Überprüfen Sie die Rails 4.2 upgrade guide für weitere Details.

Mach dir aber keine Sorgen. Sie können Poststempel mit ActionMailer weiterhin verwenden. Die official Postmark Rails gem bietet eine Drop-In-Integration mit ActionMailer für Poststempel. Wenn Sie es verwenden, sollten Sie in der Lage sein, Ihre Mailer so zu schreiben, als ob es sich um normale Rails-Mailer handelt, ohne dass Poststempel-Verbindungen in Ihrem Code manuell verwaltet werden müssen.

P.S. Ich arbeite bei Wildbit (Schöpfer des Poststempels). Zögern Sie nicht, uns jederzeit direkt zu kontaktieren.

+0

danke! Temochka, wird sicher in Kontakt sein, wenn in Probleme geraten. – codemilan