我使用了this instructions并向我的已注册用户发送了“欢迎”邮件。但这会让用户等待5-8秒,因为服务器正在尝试完成此邮件。
我不希望用户等到邮件发送后立即看到“邮件已发送”消息。所以这给我带来了Rails中的后台工作。 对于Rails中的后台作业,有很多选项,如delayed_job,Resque等。但是,据我所知,使用这些解决方案:
1-创建后台作业 2-运行此工作
假设我使用了后台作业解决方案之一,那么我还需要其他东西来运行这项工作,比如cron job ......
我认为只是发送注册和密码提醒电子邮件,应该可以实现另一种更简单的解决方案。我的意思是像另一个外部服务,1-我将为我发送的每种邮件创建一个模板,2-我会传递一些参数,如receiver_email,template_id,receiver_username,password_link等...这样,我不需要任何后台工作,用户不会等待。
我遇到了一些其他名为“sucher_punch”的宝石,但据我所知,根据人们的消息和发布的问题,使用heroku,这个宝石可能因heroku dynos的某些原因而失败,并且邮件可能无法发送,而且你不会不知道。
无论如何,rails开发人员处理此电子邮件问题的一般方式是什么?也许我也可以像上面解释的那样使用sendgrid,是吗?
答案 0 :(得分:0)
在后台发送电子邮件是一种常见的用例,Rails 4.2在#deliver_later
中引入了ActionMailer
方法,以提供无缝ActiveJob
集成。
您无需设置cron作业来检查后台队列中是否有任何作业。 Sidekiq,Resque或DelayedJob将为您解决这个问题。
似乎Sendgrid确实允许creating templates并发送变量内容来填充它们,但该功能不会破坏异步进行该调用的好处。事实上,如果外部资源(Sendgrid)不可用,将其推迟到后台还有额外的好处,即不会中断用户体验。
您应该尝试安装您提到的后台处理解决方案之一(我建议sidekiq)并利用ActionMailer + ActiveJob integration。