我正在使用按钮进行举报滥用行为,点击 ajax调用进入控制器以及之后在数据库中插入发布滥用后,它将返回成功。在成功响应时,它在UI主题上显示为滥用。 现在我想发送邮件给管理员这个。我在控制器中有集成邮件程序,即执行成功邮件代码并将邮件发送给管理员。
现在问题是发送邮件需要花费太多时间,因此 ajax响应时间也增加。我想要的是邮件代码应该在控制器发送响应后执行,以便响应时间减少。
由于
答案 0 :(得分:2)
我们使用resque邮件程序 - https://github.com/zapnap/resque_mailer/
更多信息:https://www.ruby-toolbox.com/projects/resque_mailer
设置非常简单。
更多信息:
http://blog.zerosum.org/2010/1/9/resque-mailer.html
http://www.scottw.com/simple-resque-mail-queue
http://ku1ik.com/2011/04/05/resque-mailer-says-put-your-emails-to-background.html
答案 1 :(得分:1)
处理此问题的一种简单方法是创建一个处理电子邮件的线程。只需:
Thread.new do
SomeMailer.some_method.deliver
end
您的控制器操作将继续并在单独处理线程时完成Ajax响应。请记住,如果您的邮件程序有广泛的处理,那么它可能会失败(如果没有记录线程,它将不会出现任何日志错误),如果仍然处理超出完成主控制器操作的时间。这只会在开发中发生,因为类在完成时未实例化。要解决此问题,只需在development.rb中更改此内容:
config.cache_classes = true
您也可以使用后台作业流程,但是对于较轻的负载,Threads运行良好且易于实现。
答案 2 :(得分:0)
你尝试过使用delayed_job吗?