Rails:当控制器完成执行时使用邮件程序发送邮件

时间:2012-08-08 05:33:14

标签: ruby-on-rails ruby ruby-on-rails-3 actionmailer mailer

我正在使用按钮进行举报滥用行为,点击 ajax调用进入控制器以及之后在数据库插入发布滥用后,它将返回成功。在成功响应时,它在UI主题上显示为滥用。 现在我想发送邮件给管理员这个。我在控制器中有集成邮件程序,即执行成功邮件代码并将邮件发送给管理员。

现在问题是发送邮件需要花费太多时间,因此 ajax响应时间增加。我想要的是邮件代码应该在控制器发送响应后执行,以便响应时间减少。

由于

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

处理此问题的一种简单方法是创建一个处理电子邮件的线程。只需:

Thread.new do
  SomeMailer.some_method.deliver
end

您的控制器操作将继续并在单独处理线程时完成Ajax响应。请记住,如果您的邮件程序有广泛的处理,那么它可能会失败(如果没有记录线程,它将不会出现任何日志错误),如果仍然处理超出完成主控制器操作的时间。这只会在开发中发生,因为类在完成时未实例化。要解决此问题,只需在development.rb中更改此内容:

config.cache_classes = true

您也可以使用后台作业流程,但是对于较轻的负载,Threads运行良好且易于实现。

答案 2 :(得分:0)

你尝试过使用delayed_job吗?