我一直在努力将我们的应用程序从Rails 3.2升级到4.2。由于我在浏览器中进行了一些测试,我注意到在开发中我的浏览器中没有通过letter_opener
gem生成电子邮件,并且在暂存中没有发送任何电子邮件。我在测试时开始观察控制台日志,发现邮件模板甚至没有生成。没有错误。当我切换回我的主分支(使用Rails 3)时,一切正常。这就像我的邮件被忽略了。
例如,User模型的send_welcome_email
回调如下所示:
# user.rb
after_create :send_welcome_email
def send_welcome_email
if self.email
CustomerMailer.welcome(self.id)
end
end
welcome
方法如下所示:
# customer_mailer.rb
def welcome(user_id)
@user = User.find(user_id)
msg = mail(subject: "Welcome to Sweeps!",
to: @user.email,
tag: 'customer welcome')
msg.deliver # also tried .deliver_now
end
如果我将binding.pry
放在CustomerMailer.welcome
方法中,我就不会像我期望的那样在日志中得到控制台提示,这就是我认为邮件被完全忽略的原因。
以下是我的环境的邮件设置:
# development.rb
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.asset_host = "http://localhost:3000"
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :letter_opener
# staging.rb
config.action_mailer.delivery_method = :mandrill
config.action_mailer.default_url_options = { :host => 'staging.myapp.com' }
config.action_mailer.asset_host = "http://staging.myapp.com"
config.action_mailer.raise_delivery_errors = true
答案 0 :(得分:1)
根据the doc,您可能只是缺少要求邮件程序使用deliver_now
或deliver_later
实际发送邮件。这应该被称为邮件程序类的外部,用于调用邮件程序方法。
# user.rb
after_create :send_welcome_email
def send_welcome_email
if self.email
CustomerMailer.welcome(self.id).deliver_now
end
end