1

モデルがあります。Foobarと呼びましょう。cronジョブを実行して、Foobarのインスタンスであるすべてのオブジェクトの属性を更新できるようにしたい。したがって、擬似コードでは、次のようになります。

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では使用できません。

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

ご助力ありがとうございます。

4

3 に答える 3

11

rake とは、rake タスクを意味する場合、追加=> :environmentするとタスクの Rails 環境が読み込まれ、そこでメソッドを呼び出すことができますFoobar.run_update。お気に入り、

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

rake foobar:updateそして、コンソールから呼び出して、cronjob としてスケジュールすることができるはずです。

于 2011-01-16T04:25:36.417 に答える
1

config / environment.rbを要求することにより、Rails環境をロードできます。

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'
于 2011-01-16T04:14:43.913 に答える
0

私の Sinatra アプリには、通常、models/init.rbSequel を必要とするファイルがあり、DB 接続をセットアップしてrequire_relativeから、すべてのモデル ファイルを必要とするために使用します。私の主なアプリケーションは、require_relative "models/init".

このセットアップでは、他のスクリプト (IRB を含む) をmodels/init.rb自分で要求するだけで、アプリケーションと同じモデルと DB 接続に完全にアクセスできます。

于 2011-01-16T04:17:42.233 に答える