Apa tugas 'lingkungan' di Rake?

120

Menurut " Tugas Rake Kustom ":

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

Sejauh yang saya tahu, :winner => :environmentartinya "lakukan environmentdulu winner". Tapi apa environment? Kapan saya harus menggunakannya?

Saya mencoba rake -T, tetapi dalam daftar saya tidak dapat menemukan environment.

Lai Yu-Hsuan
sumber
Lihat sintaks baru stackoverflow.com/questions/12493337/…
Jahan

Jawaban:

120

Anda bisa mendapatkan akses ke model Anda, dan pada kenyataannya, seluruh lingkungan Anda dengan membuat tugas bergantung pada tugas lingkungan. Ini memungkinkan Anda melakukan hal-hal seperti run rake RAILS_ENV=staging db:migrate.

Lihat " Tugas Rake Kustom ".

Sameer C
sumber
4
Dimanakah itu didefinisikan dalam sumber? Saya menemukan di mana tugas rake berada, dan saya menemukan definisi tugas kosong yang bergantung pada 'app: environment', tetapi saya tidak dapat menemukan definisi app: tugas lingkungan. github.com/rails/rails/blob/master/railties/lib/rails/tasks/…
odigity
4
@odigity Terlihat seperti di sini: github.com/rails/rails/blob/v4.2.4/railties/lib/rails/…
Carson
41

Itu dimuat di lingkungan Rails Anda sehingga Anda benar-benar dapat menggunakan model Anda dan apa yang tidak. Jika tidak, ia tidak tahu tentang hal-hal itu.

Jadi jika Anda membuat tugas yang baru saja dilakukan puts "HI!"maka Anda tidak perlu menambahkan :environmenttugas tersebut ke dependensi. Tetapi jika Anda ingin melakukan sesuatu seperti itu dengan User.find(1)baik, itu akan membutuhkannya.

MrDanA
sumber
35

Termasuk => :environmentakan memberi tahu Rake untuk memuat penuh lingkungan aplikasi, memberikan akses tugas yang relevan ke hal-hal seperti kelas, pembantu, dll. Tanpa :environment, Anda tidak akan memiliki akses ke salah satu dari ekstra itu.

Juga => :environmentsendiri tidak menyediakan variabel yang berhubungan dengan lingkungan, misalnya environment, @environment, RAILS_ENV, dll

Lars Levie
sumber
Metode dokumen tugas terlalu sederhana untuk memahaminya.
Albert.Qing