ActionMailer raise_delivery_errors在生产中应该是真还是假?

时间:2009-08-24 23:38:19

标签: ruby-on-rails ruby actionmailer

如果为true,它将向用户发送错误消息。 如果错误的传递错误不会被注意到。

处理此问题的推荐方法是什么?

4 个答案:

答案 0 :(得分:6)

我们只是将一个应用程序投入生产,当我们尝试发送邮件时,我们ISP的邮件服务器经常会返回“451个虚拟机忙”错误。

这两个答案对我们都没有好处:如果我们向用户返回错误,我们就会将基础设施问题传递给他们;如果我们不这样做,他们就不会得到他们的邀请/确认/通知/无论如何,没有人知道原因。

相反,我们决定设置delayed_job,并始终通过它发送邮件;它会自动重试,我们可以看到(来自数据库中的作业队列表)消息是否正在堆积。 (设置起来非常简单 - 最困难的部分是确保工作线程正在运行,这对我们的Monit配置来说是一个简单的补充。)

(Bonus:这是我写的一个初始化程序,用于在生产中延迟邮件,但仍然直接在开发和测试中发送它:http://gist.github.com/178125

答案 1 :(得分:3)

您可能会在邮件程序生命周期的某个时刻遇到传递错误。

我建议

  • raise_delivery_errors = true

    捕获错误,并向用户提供某种反馈

  • raise_delivery_errors = false#不要抓住任何东西,只是忽略失败

根据邮件的具体情况选择以上其中一种。

答案 2 :(得分:0)

您至少应该让用户(以及您自己)知道出现了问题,否则他们(和您)将不知道传递是否失败或者邮件是否只是卡在垃圾邮件文件夹中。

如果你没有收到很多错误,你可以让500错误通过,虽然这对用户来说可能有点不愉快。更好的是抓住&记录异常并让用户重试。

答案 3 :(得分:0)

如果你在本地服务器上运行postfix,如果电子邮件可以成功发送到postfix(应该总是会发生),那么就不会有问题。