我有一个 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 被 Hirefireapp 启动,但 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

有帮助吗?

解决方案 2

事实证明,Heroku Scheduler 工作得很好……我只是忘记了“更新列表”周围的引号。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top