2011-08-12 13 views
89

は "Custom Rake Tasks" によると:Rakeの「環境」タスクとは何ですか?

desc "Pick a random user as the winner" 
task :winner => :environment do 
    puts "Winner: #{pick(User).name}" 
end 

私の知る限りでは、:winner => :environmentは "winnerenvironmentを行うこと" を意味します。しかし、environmentは何ですか?それはいつ使うべきですか?

私はrake -Tを試しましたが、リストにはenvironmentが見つかりませんでした。

+0

それはソースで定義されている新しい構文http://stackoverflow.com/questions/12493337/rake-aborted-undefined-method-map-for-namesymbol –

答えて

88

環境タスクに依存するタスクを作成することで、実際にモデルにアクセスしたり、環境全体にアクセスすることができます。これにより、run rake RAILS_ENV=staging db:migrateのようなことができます。

Custom Rake Tasks」を参照してください。

+3

をチェック!私はレーキのタスクがどこにあるのかを見つけました。「app:environment」に依存する空のタスク定義が見つかりましたが、app:environmentタスクの定義が見つかりません。 https://github.com/rails/rails/blob/master/railties/lib/rails/tasks/engine.rake – odigity

+0

@odigity https://github.com/rails/rails/blob/v4のようになります。 2.4/railties/lib/rails/application.rb#L454 –

31

あなたのモデルを実際に使用することができるように、Rails環境にロードされます。さもなければ、それはそれらの事について全く知らない。

puts "HI!"というタスクを作成した場合は、:environmentタスクを依存関係に追加する必要はありません。しかし、あなたがそれを必要とするでしょうUser.find(1)のようなことをしたい場合。

22

=> :environmentを含むと、アプリケーション環境を完全にロードして、クラス、ヘルパーなどのタスクにアクセスできるようになります。:environmentがなければ、それらのエクストラにアクセスすることはできません。

また、=> :environment自体は環境関連の変数を使用できません。 environment@environmentRAILS_ENVなど

+0

タスクのドキュメントの方法は、それを理解するのは簡単すぎます。 –

関連する問題