1

Redis/Resque を使用して Heroku で実行されている ruby​​ on rails アプリ (1.9.2 および 3.2) を使用しており、rake タスクを定期的にキューに入れる必要があります。現在、ローカル マシンから 'heroku run rake update_listings' を 1 日に 1 回か 2 回実行しています。これを自動化したいと考えています。いつでも宝石を試しましたが、タスクはバックグラウンドで起動しません。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 ログを確認したところ、hirefireapp によって複数の Web dyno がスピンアップされていることがわかりましたが、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 スクリプト ファイルを見つけて読み取っているように見えますが、コードを実行していません。ログ エントリで引用符が削除されていることに気付いたので、シェル スクリプト ファイルでも単一引用符を使用してみましたが、変更はありませんでした。また、update.sh を次のように変更してみました。

heroku run rake update_listings

エラーが返ってきましたheroku: command not found

4

2 に答える 2

0

Heroku スケジューラは完璧に機能することがわかりました...「更新されたリスト」に関する引用符を忘れてしまいました。

于 2012-07-16T02:07:57.583 に答える
0

個人的には、cron を使用して resque / redis キューにジョブを追加する resque_scheduler を使用しました。

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または、シェル スクリプトを実行し、crontab を使用してジョブをトリガーすることもできます。

于 2012-03-13T12:16:21.877 に答える