【问题标题】:Should I use Delayed Job for long running background tasks?我应该将延迟作业用于长时间运行的后台任务吗?
【发布时间】:2014-03-23 01:49:21
【问题描述】:

我有一个应用程序,我想在用户激活 72 小时后自动将其停用。我已经使用延迟作业进行了设置,但现在我想知道这是否是最佳选择。

我的问题是,如果我将任务设置为未来 72 小时,那么在整个 72 小时内是否会有工作人员处于活动状态? (我担心 Heroku 按小时收费)

我愿意在此提出更好的建议。我的一个想法是使用exp_date 列进行设置,并在登录时通过完全消除对 DJ 的需要进行检查。

【问题讨论】:

  • 您使用的是什么身份验证 gem?
  • 您绝对可以使用在数据库可验证之后实施的自定义设计策略,该策略检查帐户的创建日期然后阻止登录 - 更简单,不需要 cron 作业,它只在以下时间生效用户尝试登录。
  • 是的,我认为这是最好的方法。至少我可以和 DJ 一起玩!

标签: ruby-on-rails heroku delayed-job


【解决方案1】:

我的问题是,如果我将任务设置为未来 72 小时,那么在整个 72 小时内是否会有工作人员处于活动状态? (我担心 Heroku 按小时收费)

是的,它会一直运行。延迟作业不断 ping 数据库以查看其队列中是否有作业。

而且,关于最佳选择,我认为我宁愿将一列称为valid_upto,并将日期设为有效。我只向那些created_at 日期小于或等于valid_upto 日期的用户登录(或其他)。而且,可能会定期每月一次,我将运行一项 cron 作业以删除 invalid 用户。

而且,就像@leesungchul 建议的那样,您可以使用它,这看起来很酷。

【讨论】:

    【解决方案2】:

    您可以使用 workless gem,它是延迟工作的插件,这样您就不会让您的工作人员在 heroku 上不断运行。

    https://github.com/lostboy/workless

    【讨论】:

    • 我已经查看了其中的几个,但我仍然不清楚工作人员是否会在整个延迟期间保持活动状态。在当地看来是这样。如果是这种情况,那么即使工人在工作后被解雇,即使它只是在等待,它仍然会在很长一段时间内处于活动状态,并且会产生在此期间拥有一名活跃工人的成本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    相关资源
    最近更新 更多