2009-05-26 16 views
0

プラグインで定義されたモデルを使用するアプリケーションのレーキタスクを実行すると、初期化されない定数エラーが発生しますが、スクリプト/ランナーを使用してモデルプロセスを実行すると、レーキタスクで起動され、 ?rakeタスクで使用できるプラグインはありますか?

環境にパスされているにもかかわらず、私がrakeタスクを起動したときに発生しない、すべてのプラグインをロードするスクリプト/ランナーにはいくつかの違いがありますか?

答えて

1

あなたのレーキタスクは、環境に依存する必要があります。それはあなたがあなたのrakeタスクをロードする環境が必要であることを指定する必要があります例:

desc "Make DB Views" 
task :views => [:environment] do |t| 
# your task's code 

end 
+0

それは問題ですが、私たちは環境がそのように受け継がれているので、それがとても奇妙になります。 – nitecoder

0

をあなたのアプリケーションの環境をスピンアップし、など、あなたのモデルへのあなたのアクセス、

を与える:

task :your_task => :environment do |t| ... 

または

task :your_task => [:environment] do |t| ... 

または

task :your_task, :param1, :param2, :needs => :environment do |t, args| ... 

または

task :your_task, :param1, :param2, :needs => [:environment] do |t, args| ... 

あなたはこれを指定しなかった場合は、別の問題があります。私は、エラーの一般的な原因は、プラグインがRails::Pluginという名前空間の中にロードされているという事実によると思います。したがって、プラグインにFooというクラスを定義した場合、Rakeタスクは単にFooの代わりにそれをRails::Plugin::Fooとして参照する必要があります。これで問題が解決しない場合は

は、プラグインのinit.rbファイルの最初の行にputs "Check"を追加し、あなたのrakeタスクを実行するときCheckが表示されていることを確認してみてください。そうであれば、プラグインがロードされていますが、それ以降は静かに失敗します。

最後に、タスクの外でプラグインを使用しようとしています(たとえば、Rakeファイルの先頭、初期化コードなど)。その場合は、タスクが実行されたとき(環境がロードされているとき)にのみプラグインがロードされるため、失敗します。

これが役に立ちます。

関連する問題