没有调用梅勒方法?

时间:2015-04-01 09:03:37

标签: ruby-on-rails-4.2 ruby-2.1 postmark

控制器内部:

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控制台调用时,它可以工作。我为postmark api和配置文件做了所有必要的配置。唯一的事情是在rails 4.1.0中,控制器内部的邮件程序被调用,但是在rails 4.2中,它从rails console调用时不起作用。究竟是什么原因无法弄明白。

1 个答案:

答案 0 :(得分:5)

您在此处注意到的行为是Rails 4.2中引入的新默认值:

  

随着Active Job和#deliver_later的引入......实例方法的调用(在邮件程序上)被推迟,直到调用deliver_now或deliver_later。

查看Rails 4.2 upgrade guide了解详情。

不过不用担心。您仍然可以使用Postmark与ActionMailer。 official Postmark Rails gem提供与Postmark的ActionMailer的插件集成。通过使用它,您应该能够编写邮件,就像它们是常规的Rails邮件程序一样,而无需在代码中手动管理邮戳连接。

P.S。我在Wildbit(邮戳的创作者)工作。请随时直接与我们联系。