2012-03-09 66 views
1

我在Rails應用程序(1.9.2和3.2)上使用Redis/Resque在Heroku上運行ruby需要一個rake任務定期入隊。現在我正在從本地機器上運行'heroku run rake update_listings',每天一次或兩次....我想自動執行此操作。我嘗試過每當寶石,但任務不會在後臺啓動。 Heroku調度程序看起來是合適的解決方案,但是我被scheduler.rb文件弄糊塗了。我有:Heroku scheduler Resque

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的日誌,我看見幾個網頁DYNOS得到由hirefireapp紡漲,但update_listings耙任務從來沒有被調用。

更新:我放棄了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

回答

0

事實證明,Heroku Scheduler的工作完美...我只是忘記了「更新列表」引號。

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" 

或者,你可能只是另送一個shell腳本Rake::Task["update_listings"].execute並使用crontab來觸發作業。

+0

謝謝,我更新了我遇到的一些問題,並嘗試使用crontab解決方案。 – tbone 2012-07-15 23:26:57

+0

你的procifle設置如何做到這一點@TomDunning http://stackoverflow.com/questions/41537142/heroku-procfile-resque-puma-rails-5-resque-scheduler-setup – 2017-01-08 20:19:36

+0

@chrishough,做什麼?執行調度程序?這是resque_scheduler gem的一部分 – TomDunning 2017-01-09 10:33:30