Heroku 上每分钟调度一个作业 Rails 3.1

发布于 2024-12-03 09:07:17 字数 119 浏览 1 评论 0原文

我想在 Heroku 上每分钟运行一个任务,以检查是否满足使某些用户任务超时的条件。我只能每小时运行一次 Heroku cron 作业,那么设置这样的定时任务的最佳方法是什么。我在 Heroku 上使用 Rails 3.1。

I want to run a task every minute on Heroku to check if conditions are met to time-out certain user tasks. I can only run a Heroku cron job every hour, so what's the best way to set up a timed task like this. I am using Rails 3.1 on Heroku.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时常饿 2024-12-10 09:07:17

从今天开始,您可以使用日程安排 gem,clockwork。 Heroku 官方支持这一点,您可以在此处找到他们的文档。

As of today, you can the scheduling gem, clockwork. Heroku officially supports this and you can find their documentation here.

神妖 2024-12-10 09:07:17

您可以将 delayed_job 与带有 :run_at 的自重启作业结合使用。有点像这样:

class YourJob
    def do_interesting_things
        #... Do what needs to be done.
        self.delay(:run_at => 1.minute.from_now).do_interesting_things
    end

    def self.start_me_up
        new.do_interesting_things
    end
end

然后在应用程序初始化期间的某个地方:

YourJob.start_me_up

You could use delayed_job with a self-restarting job with a :run_at. Something sort of like this:

class YourJob
    def do_interesting_things
        #... Do what needs to be done.
        self.delay(:run_at => 1.minute.from_now).do_interesting_things
    end

    def self.start_me_up
        new.do_interesting_things
    end
end

And then somewhere during your application's initialization:

YourJob.start_me_up
南渊 2024-12-10 09:07:17

Clockwork 是可行的方法,但我会建议另一种解决方法。

使用调度程序(每10分钟)+延迟作业每分钟执行一次任务。这似乎比没有调度程序的解决方案更可靠一点。

MyJob.run!

(1..8).each |i|
   MyJob.delay(run_at: i.minutes.from_now).run! # create 8 more jobs (each start 1 minute later)
end

Clockwork is the way to go but I will suggest another workaround.

Use scheduler (every 10min) + delayed jobs to execute the task every minute. This seems a little bit more reliable solution than the one without scheduler.

MyJob.run!

(1..8).each |i|
   MyJob.delay(run_at: i.minutes.from_now).run! # create 8 more jobs (each start 1 minute later)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文