【问题标题】:Sending automatic mails in a Rails app在 Rails 应用程序中发送自动电子邮件
【发布时间】:2013-02-04 17:34:30
【问题描述】:

在我的 rails 应用程序中,用户可以订阅一些事件。我想在活动开始前 24 小时向用户发送邮件。

我不确定如何实现。耙子任务?是否有一些宝石或最佳实践可以遵循?

谢谢!

编辑:

我想我的 cron 必须每分钟运行一次才能获得 24 小时内开始的每个事件。但是如果 cron 停止,或者需要超过一分钟,我就不能跳过一些电子邮件。换句话说,我怎么能确定我不会两次发送相同的电子邮件?

【问题讨论】:

  • 您没有尝试将您的某些字词输入谷歌,是吗?
  • 我当然做到了,但这不是同一个问题。请在投反对票之前尝试理解!也许我必须澄清我的问题。这不是一个简单的 cron。我的 cron 必须每分钟运行一次才能让每个事件在 24 小时内开始。但是如果 cron 停止,或者需要超过一分钟,我就不能跳过一些电子邮件。另一方面,我如何确定我不会两次发送相同的电子邮件?
  • 更新了我的答案以考虑此评论。

标签: ruby-on-rails email cron


【解决方案1】:

签出:

http://railscasts.com/episodes/206-action-mailer-in-rails-3

用于发送邮件和

http://railscasts.com/episodes/164-cron-in-ruby-revised

用于随时设置 cron 来调用您的邮件程序

编辑:刚刚看到您的评论。在这种情况下,我会考虑使用 resque-scheduler 之类的东西或与 sidekiq 等效的东西:

https://github.com/bvandenbos/resque-scheduler

那么你可以这样做:

Resque.enqueue_at(24.hours.from_now, SendFollowUpEmail, :user_id => current_user.id)

sidekiq 示例:

FollowUpEmailer.perform_in(24.hours.from_now, current_user.id)

【讨论】:

  • 我已经在使用 sidekiq。事实上,我真的不需要 cron。我只需要在 after_create 中添加您的行,对吗?!如果用户取消订阅活动,有没有办法取消电子邮件?
  • 我不认为有办法看到:github.com/mperham/sidekiq/pull/257,最后一条评论 Mike 说你的工作应该检查是否应该发送。在那种情况下,我只需要: send_email if user.subscribed?在我的工作中
  • 应该很容易实现。非常感谢!我看到的唯一缺点是如果我的服务器崩溃或重新启动,我会丢失我的 sidekiq 队列中的所有消息......
  • 糟糕,请进一步阅读我发布的链接,现在有一个 API 可以删除作业。但是,在你的情况下,我可能仍然会按照我的建议去做。
  • 可以让redis时不时的保存到磁盘,尽量减少崩溃的影响:redis.io/topics/persistence
【解决方案2】:

https://github.com/mperham/sidekiq/pull/257

这将帮助您在预定时间内解决自动邮件系统!

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2014-02-03
    • 2015-04-27
    • 2015-07-31
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多