プラグインで定義されたモデルを使用するアプリケーションのレーキタスクを実行すると、初期化されない定数エラーが発生しますが、スクリプト/ランナーを使用してモデルプロセスを実行すると、レーキタスクで起動され、 ?rakeタスクで使用できるプラグインはありますか?
環境にパスされているにもかかわらず、私がrakeタスクを起動したときに発生しない、すべてのプラグインをロードするスクリプト/ランナーにはいくつかの違いがありますか?
プラグインで定義されたモデルを使用するアプリケーションのレーキタスクを実行すると、初期化されない定数エラーが発生しますが、スクリプト/ランナーを使用してモデルプロセスを実行すると、レーキタスクで起動され、 ?rakeタスクで使用できるプラグインはありますか?
環境にパスされているにもかかわらず、私がrakeタスクを起動したときに発生しない、すべてのプラグインをロードするスクリプト/ランナーにはいくつかの違いがありますか?
あなたのレーキタスクは、環境に依存する必要があります。それはあなたがあなたのrakeタスクをロードする環境が必要であることを指定する必要があります例:
desc "Make DB Views"
task :views => [:environment] do |t|
# your task's code
end
をあなたのアプリケーションの環境をスピンアップし、など、あなたのモデルへのあなたのアクセス、
を与える:
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ファイルの先頭、初期化コードなど)。その場合は、タスクが実行されたとき(環境がロードされているとき)にのみプラグインがロードされるため、失敗します。
これが役に立ちます。
それは問題ですが、私たちは環境がそのように受け継がれているので、それがとても奇妙になります。 – nitecoder