2011-12-31 10 views
0

URLアドレスにCRONを設定するのはPHPに慣れていて、時間間隔で自動的に実行したいと思っています。Herokuでスケジューラアドオンを設定する方法

今、私はHerokuのでSchedular add-onをセットアップしようと、私は少し問題を抱えている - 私は、ファイルlib/tasks/scheduler.rakeを作成し、Herokuの上の管理セクションに何ができるか、すべてを設定しますが、私は少し混乱しています

、どのようにすべての作品 - 例えば、これらの線がlib/tasks/scheduler.rakeである:update_feed:

desc "This task is called by the Heroku scheduler add-on" 
task :update_feed => :environment do 
    puts "Updating feed..." 
    NewsFeed.update 
    puts "done." 
end 

task :send_reminders => :environment do 
    User.send_reminders 
end 

は、タスクタスクを何を意味するの?セットアップ時にこのアクションが実行されますか?しかし、これはコントローラの動作ですか?たとえば、コントローラhomeのアクションmy_actionを毎日実行する必要がある場合はどうなりますか?私はもう一度my_actionupdate_feedだけを設定する必要がありますか?

答えて

2

curlまたはwgetを使用してhttpアクションを呼び出すと、httpリクエストがスケジュールされ、httpリクエストによってPHPアクションが実行されます。そのアクションコードには、いくつかの仕事/ロジックがありますそれが起こる。

herokuスケジューラを使用すると、httpリクエストの内容と動作をすべてスキップして、ロジック/作業を直接レイクタスクに入れることができます(または、通常のルビクラスまたはモデルに入れて、 )。

これは、rakeタスクがフルレール環境(これはタスク定義の環境依存関係部分)を読み込んでいるため動作します。したがって、rakeタスク本体の内部で、あなたのrailsアプリケーションモデル、必要なgem、アプリケーション構成、すべて - レールのコントローラまたはモデルクラスの内部のようなものです。

杉の上にいるとスケジューラがタスクを1回限りのダイナモインスタンスで呼び出すので、あなたのアプリのメインダイナモがスケジューラによって実行されるタスクで占有されないということですcron - > http request - > controllerアクションパターンを使用します。

あなたが何をしようとしているかについてもっと教えてください、私はより具体的な助言を与えることができますが、一般的に私は通常、タスクのロジックをlibディレクトリのプレーンなrubyクラスで定義します。モデルであり、これはタスク本体から呼び出されるものです(上で引用したサンプルコードのように)。

+0

返信ありがとう、アンドリュー。私は質問があります - どのように私の仕事を月に1回だけ走らせることができますか? Schedularのメニューには、** Daily **、** Hourly **、** 10 mins **というオプションがあります。 – user984621

+1

これを毎日呼び出すと、現在の日にタスクがチェックされ、1日(または何でも)実行されていれば、それ以外の場合は戻ります。 –

関連する問題