用于在rails

时间:2017-02-17 15:48:46

标签: ruby-on-rails email heroku sendgrid rails-activejob

我使用了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,是吗?

1 个答案:

答案 0 :(得分:0)

在后台发送电子邮件是一种常见的用例,Rails 4.2在#deliver_later中引入了ActionMailer方法,以提供无缝ActiveJob集成。

您无需设置cron作业来检查后台队列中是否有任何作业。 Sidekiq,Resque或DelayedJob将为您解决这个问题。

似乎Sendgrid确实允许creating templates并发送变量内容来填充它们,但该功能不会破坏异步进行该调用的好处。事实上,如果外部资源(Sendgrid)不可用,将其推迟到后台还有额外的好处,即不会中断用户体验。

您应该尝试安装您提到的后台处理解决方案之一(我建议sidekiq)并利用ActionMailer + ActiveJob integration