【问题标题】:How do I schedule rails mailers to send on specific days (heroku)?如何安排 Rails 邮件在特定日期(heroku)发送?
【发布时间】:2020-08-11 23:20:29
【问题描述】:

所以我在这里只是需要一些建议。

我有一个部署到 heroku 的应用程序,并且我设置了邮件程序,因此当“添加记录”之类的邮件程序运行并向用户发送电子邮件。

我想创建的一种邮件类型是在特定日期发出的。

例如,我可能会说,在 11 月 3 日早上 6 点发送邮件。

我该如何安排呢?我的意思是我不能真正使用 .deliver_later 因为我意识到当测功机进入睡眠状态时,工作将不再排队(至少我是这么理解的)

所以我想我需要使用 Redis、Sidekiq 或 Heroku Scheduler 之类的东西?关于这个主题的任何建议都会非常有帮助。我已经阅读了一些关于此的 SO 帖子,但我仍然迷路了。

谢谢你。

【问题讨论】:

    标签: ruby-on-rails ruby heroku


    【解决方案1】:

    您可以使用 Sidekiq 实现它。

    Sidekiq 允许您安排执行作业的时间。您使用perform_in(interval_in_seconds, *args)perform_at(timestamp, *args) 而不是标准的perform_async(*args)

    MyWorker.perform_in(3.hours, 'mike', 1)
    MyWorker.perform_at(3.hours.from_now, 'mike', 1)
    

    这很有用,例如,如果您想在用户注册 3 小时后向他们发送电子邮件。过去计划的作业将排队等待立即执行。

    在您的情况下,您可以使用perform_at(timestamp, *args) 来实现它,看看代码 -

    time_stemp = DateTime.parse("09/11/2020 06:00 AM")
    SendMailToUserWorker.perform_at(time_stemp, args)
    

    更多信息在这里 - https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs

    【讨论】:

    • 谢谢,我相信这很有帮助。但是我对这些工人去哪里以及他们如何与我的控制器交互感到非常迷茫。我试过浏览 sidekiq 文档和视频,但就是不明白。
    • @WesCreations - 该工作人员创建了一个将在特定时间执行的队列。看看 sidekiq wiki,你会得到同样的想法。每个 sidekiq 作业都有一个 id,如果您想取消调度,您可以随时通过作业 ID 拉取特定作业。
    • 终于搞定了这个工作。非常感谢,它确实成功了。但是,我不得不稍微更改日期的格式:time_stamp = DateTime.parse("21st Aug 2020 07:25:00 PM")
    【解决方案2】:

    我没有使用过 Heroku。就我而言,我使用 sidekiqsidekiq-cron 来做一些 cron 工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多