【问题标题】:Heroku scheduler ResqueHeroku 调度器 Resque
【发布时间】:2012-03-09 12:37:05
【问题描述】:

我有一个 ruby​​ on rails 应用程序(1.9.2 和 3.2)在 Heroku 上使用 Redis/Resque 运行,需要定期将 rake 任务排入队列。现在我每天从我的本地机器上运行一次或两次“heroku run rake update_listings”......我想自动化这个。我已经尝试过无论何时 gem,但该任务不会在后台启动。 Heroku 调度程序似乎是合适的解决方案,但我对 scheduler.rb 文件感到困惑。我有:

desc "This task is called by the Heroku scheduler add-on"
task :hourly_feed => :environment do
  Rake::Task[update_listings].execute
end

当我从 Heroku 调度程序控制台运行 :hourly_feed 任务并检查 heroku 日志时,我看到几个 web dynos 被hirfireapp 启动,但从未调用 update_listings rake 任务。

更新:我放弃了 resque_scheduler。我太绿了,无法完成这项工作,因此尝试使用 crontab 和 sript 文件。这是我的 update.sh 脚本文件:

Rake::Task["update_listings"].execute

我使用 crontab-e 设置了 cron,我让它每 5 分钟执行一次,但我在邮件日志中收到错误:

Projects/livebytransit/update.sh: line 1: Rake::Task[update_listings].execute: command not found

它似乎正在查找我的 update.sh 脚本文件并读取它,但它没有执行代码。我注意到日志条目删除了引号,所以我也尝试在 shell 脚本文件中使用单引号,没有变化。我还尝试将 update.sh 更改为:

heroku run rake update_listings

错误回来了heroku: command not found

【问题讨论】:

    标签: heroku crontab scheduler resque rake-task


    【解决方案1】:

    就我个人而言,我使用了 resque_scheduler,它会使用 cron 将作业添加到 resque/redis 队列中。

    resque_schedule.yml

    count_delayed_jobs_job:
     cron: "0 */1 * * *"
     class: Support::CountDelayedJobsResque
     queue: CDJ
     args: 
     description: "count_delayed_jobs_job, every 1hr"
    

    或者,您可以将 Rake::Task["update_listings"].execute 放入 shell 脚本并使用 crontab 来触发该作业。

    【讨论】:

    • 谢谢,我更新了我在尝试 crontab 解决方案时遇到的一些问题。
    • 你的 procifle 设置如何做到这一点@TomDunning stackoverflow.com/questions/41537142/…
    • @chrishough,要做什么?执行调度程序?这是 resque_scheduler gem 的一部分
    【解决方案2】:

    事实证明 Heroku Scheduler 完美运行...我只是忘记了“更新列表”周围的引号。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2012-08-28
      • 2023-04-02
      • 2013-04-02
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2011-07-23
      相关资源
      最近更新 更多