需要在特定时间开展工作

时间:2011-05-20 20:27:47

标签: ruby-on-rails ruby-on-rails-3 heroku

我正在尝试创建一个作业,以便向Twilio调用发送通知,因此有一个强大的解决方案可以确保作业在特定时间运行很重要(我认为不会被放置进入队列足够准确)。

此类任务的最佳解决方案是什么?

这些通知需要在通话中的特定时间发生。如“1分钟左右”。因此它需要能够:

  1. 在任意时间(下午1:22或凌晨2:45)运行
  2. 由用户输入定义(他们设置通话时间)
  3. (如果该解决方案可以在Heroku上运行会很好)

4 个答案:

答案 0 :(得分:3)

您可以使用Heroku cron每天或每小时运行一次作业。

每日cron是免费的,每小时cron每月花费3美元:http://addons.heroku.com/cron

通常cron会在您首次启动时运行(例如,如果您在下午3点设置它,它将在每天下午3点运行),但您可以通过发送电子邮件来支持@ heroku来更改它.COM。

要在cron中运行代码,请将代码添加到cron.rake文件中,然后查看cron文档here

FYI

Heroku自己的cron样本建议进行时间检查,即

if Time.now.hour % 4 == 0 # run every four hours
  ...

但是,如果您正在运行每日cron,则代码将在可能失败上述条件的时间运行。因此,除非您支付每小时cron的费用,并且您只希望它运行特定的小时,否则请忽略其部分示例代码并正常包含您自己的代码。

以特定时间运行

尝试delayed_job的{​​{1}}列,这可以为您提供在特定时间运行作业所需的灵活性。

Heroku文档:http://devcenter.heroku.com/articles/delayed-job

答案 1 :(得分:1)

你需要为此添加一个cronjob。如果您在Linux机器上,那么您可以将cron添加到crontab并指定它运行的时间。它非常灵活。你可以在这里找到详细信息:
http://en.wikipedia.org/wiki/Cron

如果你想以红宝石的方式做,请尝试每当gem:
https://github.com/javan/whenever

答案 2 :(得分:0)

在主机控制面板中转到cron作业

答案 3 :(得分:0)

对于您提到的具体案例,我认为您应该尝试使用delayed_job:
https://github.com/collectiveidea/delayed_job#readme

它有一个run_at选项,您可以在其中指定运行作业的时间。