2011-01-16 8 views
1

私はモデルを持っています。それはFoobarと呼ばせてください。私はFoobarのインスタンスであるすべてのオブジェクトの属性を更新するためにcronジョブを実行できるようにしたい。だから、擬似コードでは、それはこのようなものかもしれません:Rakefile/Ruby on Rails 3のモデルからクラスメソッドにアクセス

Foobar.all.each do |foobar| 
    foobar.update_attributes({:my_attribute => 'updated'}); 
end 

さて、私はFoobar.run_updateというクラスメソッドでそれをラップしましょう()。

Foobar.run_update()を呼び出すと、コントローラまたはビューから正常に機能します。しかし、私がしたいのは、Rakefileからrun_update()を実行して、それをcronの実行に結びつけることです。しかし、Foobarクラスは、crontabから呼び出されたときにRakeには利用できません。

どうすれば解決できますか?レイクがcronから呼び出されたとき、レイクからFoobarsのクラスメソッドにアクセスするにはどうすればいいですか?

ありがとうございました。

+0

レーキとは、レーキタスクのことですか? – Chirantan

+0

最高の投票回答を受け入れると、あなたの評判は3倍になります! :O –

答えて

1

あなたはのconfig/environment.rbに要求することにより、Railsの環境を読み込むことができます。私のシナトラのアプリで

ENV["RAILS_ENV"] ||= "production" 
require '/where/your/rails/project/is/config/environment.rb'
0

は、私は通常、ファイル続編を必要とmodels/init.rbを持って、私のDB接続を設定した後、すべてのモデルファイルを要求するのにrequire_relativeを使用します。私の主なアプリケーションはrequire_relative "models/init"です。

この設定では、自分自身でmodels/init.rbファイルを必要とし、アプリケーションと同じモデルとDB接続に完全にアクセスできる必要があります(IRBを含む)。

11

rakeでは、rakeタスクを意味する場合は、=> :environmentを追加するとタスクのレール環境がロードされ、そこでFoobar.run_updateメソッドを呼び出すことができます。同様に、

namespace :foobar do 
    task :update => :environment do 
    Foobar.run_update 
    end 
end 

そして、あなただけのコンソールからrake foobar:updateを呼び出すことができ、それはcronジョブとしてスケジュールが必要です。

関連する問題