我正在使用一个报告滥用按钮,单击哪个ajax 调用转到控制器,然后在数据库中插入滥用的帖子后,它返回成功。在成功响应时,它在 UI 主题上显示为滥用。现在我想向管理员发送有关此的邮件。我已经在控制器中集成了邮件程序,即成功执行邮件程序代码并将邮件发送给管理员。
现在的问题是发送邮件需要太多时间,所以我的ajax 响应时间也增加了。我想要的是邮件程序代码应该在控制器发送响应之后执行,这样响应时间应该会减少。
谢谢
我正在使用一个报告滥用按钮,单击哪个ajax 调用转到控制器,然后在数据库中插入滥用的帖子后,它返回成功。在成功响应时,它在 UI 主题上显示为滥用。现在我想向管理员发送有关此的邮件。我已经在控制器中集成了邮件程序,即成功执行邮件程序代码并将邮件发送给管理员。
现在的问题是发送邮件需要太多时间,所以我的ajax 响应时间也增加了。我想要的是邮件程序代码应该在控制器发送响应之后执行,这样响应时间应该会减少。
谢谢
我们使用 resque mailer - 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
处理此问题的一种简单方法是创建一个线程来处理电子邮件。只需这样做:
Thread.new do
SomeMailer.some_method.deliver
end
在单独处理线程时,您的控制器操作将继续并完成 Ajax 响应。请记住,如果您的邮件程序有大量处理,那么它可能会失败(并且它不会记录任何错误,因为没有记录线程)如果仍然处理超过完成主控制器操作的时间。这只会在开发中发生,因为类在完成时未实例化。要解决这个问题,只需在你的 development.rb 中更改它:
config.cache_classes = true
您也可以使用后台作业进程,但对于较轻的负载,线程工作得很好并且易于实现。
你试过使用delayed_job吗?