1

我有一个 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 Scheduler 控制台运行 :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

4

2 回答 2

0

就个人而言,我使用了 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 来触发该作业。

于 2012-03-13T12:16:21.877 回答
0

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

于 2012-07-16T02:07:57.583 回答