カスタムのレーキタスクを作成しようとしていますが、モデルにアクセスできないようです。これは、Railsタスクに暗黙的に含まれているものだと思いました。
Lib/tasks/test.rakeに次のコードがあります。
namespace :test do
task :new_task do
puts Parent.all.inspect
end
end
そして、親モデルは次のようになります。
class Parent < ActiveRecord::Base
has_many :children
end
これは非常に単純な例ですが、次のエラーが表示されます。
/> rake test:new_task
(in /Users/arash/Documents/dev/soft_deletes)
rake aborted!
uninitialized constant Parent
(See full trace by running task with --trace)
何か案は?ありがとう
それを理解すると、タスクは次のようになります。
namespace :test do
task :new_task => :environment do
puts Parent.all.inspect
end
end
=> :environment
タスクに追加された依存関係
構成が必要な場合があります(必要なすべてのモデルなどを指定する必要があります)
例えば:
require 'config/environment'
あるいは、それぞれを個別に要求することもできますが、環境の問題が発生する場合がありますAR
rakeタスクの作成を開始したら、ジェネレータを使用してそれらをスタブアウトします。
例えば:
Rails g task my_tasks task_one task_two task_three
Lib/tasksにmy_tasks.rake
という名前のスタブが作成されます(明らかに独自のネームスペースを使用します)。これは次のようになります。
namespace :my_tasks do
desc "TODO"
task :task_one => :environment do
end
desc "TODO"
task :task_two => :environment do
end
desc "TODO"
task :task_three => :environment do
end
end
すべてのRailsモデルなどは、production環境を使用している場合を除き、各タスクブロック内から現在の環境で使用できます。使用する特定のモデルが必要です。これはタスクの本体内で行います(IIRCはRailsのバージョンによって異なります)。
新しいRubyハッシュ構文(Ruby 1.9)を使用すると、環境はrakeタスクに次のように追加されます。
namespace :test do
task new_task: :environment do
puts Parent.all.inspect
end
end
:environment依存関係は非常に正確に呼び出されますが、rakeはモデルが依存している他のgem(私の場合は「protected_attributes」)についてまだ知らない場合があります。
答えは次のとおりです。
bundle exec rake test:new_task
これにより、Gemfileで指定されたgemが環境に含まれることが保証されます。
以下のコマンドを使用してタスクを生成します(タスク名を持つ名前空間):
Rails g task test new_task
以下の構文を使用してロジックを追加します。
namespace :test do
desc 'Test new task'
task new_task: :environment do
puts Parent.all.inspect
end
end
以下のコマンドを使用して上記のタスクを実行します。
bundle exec rake test:new_task
または
rake test:new_task