6

コントローラーの内部:

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

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  

上記の Rails 4.1.0 ではコントローラーのメソッドが呼び出され、電子メールが送信されますが、Rails 4.2 ではコントローラーのメーラー メソッドは呼び出されませんが、Rails コンソールから呼び出されると機能します。消印APIと構成ファイルに必要なすべての構成を行いました。唯一のことは、コントローラー内のレール4.1.0メーラーが呼び出されることですが、レール4.2ではそうではありませんが、レールコンソールから呼び出されたときに機能します。実際にそれを理解できない正確な理由は何ですか。

4

1 に答える 1

6

ここで気付く動作は、Rails 4.2 で導入された新しいデフォルトです。

Active Job と #deliver_later の導入により、(メーラーでの) インスタンス メソッドの呼び出しは、deliver_now または delivery_later が呼び出されるまで延期されます。

詳細については、Rails 4.2 アップグレード ガイドをご覧ください。

でも心配しないでください。ActionMailer では引き続き Postmark を使用できます。公式のPostmark Rails gemは、Postmark 用の ActionMailer とのドロップイン統合を提供します。これを使用すると、コードで Postmark 接続を手動で管理する必要なく、通常の Rails メーラーのようにメーラーを作成できるはずです。

PS 私は Wildbit (Postmark の作成者) で働いています。いつでもお気軽に直接お問い合わせください。

于 2015-04-01T15:22:40.860 に答える