我应该使用哪个 Ruby / Rails 后台作业框架(适用于 Heroku)在 Rails 中动态添加未来的作业

Which Ruby / Rails Background Job Framework should I use (that works on Heroku) for dynamically adding future jobs in Rails

所以我创建了一个客户端-服务器(Rails 用于客户端和服务器)系统,它将有许多客户端和一个服务器,使用 REST 进行交互。

客户端可以在服务器上发送/更新/删除他们自己的 "Jobs",现在只是一个 table 命名的 Jobs。 Jobs belongs_to一个table命名的Apps,当然是has_many个jobs(每个App条目代表一个客户端,所以客户端只能在服务器上添加/删除/更新/读取他们的jobs) .

这样做的目的是让客户端可以向作业添加条目 table 并指定一天中的时间(将来),以便他们可以 运行 作业。获得 运行 的作业是调用第 3 方电子邮件服务来发送电子邮件。

所以我需要一个 Jobs 框架,它可以在 Heroku 上轻松 运行,并遍历我的 Jobs table(比如,每半小时......或者甚至每 5 分钟...... ),并根据日期时间列查看是否有任何作业需要 运行(检查日期时间条目是否等于或小于工人 运行ning 的当前时间)

我应该为此使用哪个 Rails/Heroku Job 框架?

我更喜欢简单,所以我在看: https://devcenter.heroku.com/articles/scheduler
但是,我不能使用这个,因为它会警告:

Scheduler is a “best effort” service, meaning that execution is expected but not guaranteed. Scheduler is known to occasionally (but rarely) miss the execution of scheduled jobs"

所以接下来我查看了 https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes - 可以使用像 Resque 或 Delayed Job 这样的 Gems 来实现。我目前正在研究它..

理想情况下,我希望能够找到一个工作框架来补充(或取代)我的工作table(所以,每当我向我的工作 table 添加或删除它,我的每个工作条目都会与工作框架中的实际工作有 1:1 关系,我也会在我时添加/更新/删除添加/更新/删除我的作业 table 和/或作业框架中的作业条目 )。当然,我会为服务器上的所有 CRUD 操作编写逻辑(一旦它收到来自客户端的 REST 调用)——但是客户端需要能够随时删除和重新添加它在服务器上的所有作业;而且我没有看到任何允许我在任何给定时间动态地动态添加和删除未来工作的工作框架。所有现有框架似乎都是为 运行 在特定时间或时间间隔安排的作业创建的,在配置文件中指定。这很好,但我想检查 S.O 以验证我在选择我的设置/框架时做出了最佳决定

抱歉这个冗长/复杂的问题 - 我很感激任何人对我的建议!
谢谢!!!

这听起来像是 Resque and Resque-scheduler 的工作。

这是一个语法示例:

Resque.enqueue_in(5.days.from_now, SendFollowupEmail, argument)

如果需要在执行前删除:

Resque.remove_delayed(SendFollowUpEmail, :user_id => current_user.id)