# File vendor/rails/railties/lib/initializer.rb, line 55def env
@_env||=ActiveSupport::StringInquirer.new(RAILS_ENV)end
Tapi, lihat secara khusus bagaimana dibungkus, menggunakan ActiveSupport::StringInquirer:
Membungkus string di kelas ini memberi Anda cara yang lebih cantik untuk menguji kesetaraan. Nilai yang dikembalikan oleh Rails.env dibungkus dengan objek StringInquirer jadi alih-alih memanggil ini:
Rails.env =="production"
Anda dapat memanggil ini:
Rails.env.production?
Jadi mereka tidak persis setara, tetapi mereka cukup dekat. Saya belum pernah menggunakan Rails, tapi saya katakan #Rails.envtentu saja pilihan yang lebih menarik secara visual karena menggunakan StringInquirer.
penjelasan yang bagus, thx! Saya juga mencoba mencari di mana RAILS_ENV didefinisikan? Ada ide??
brad
70
Layak disebutkan bahwa itu Rails.envadalah standar baru RAILS_ENVyang sedang ditinggalkan.
Ryan Bigg
4
Ryan, pada baris perintah, Anda tidak bisa menggunakan Rails.env. jadi jika itu segera ditinggalkan, lalu apa yang akan Anda gunakan pada CLI?
pjammer
8
Menggunakan Rails.env.production? mengamankan Anda dari kesalahan ketik yang benar-benar mengubah lingkungan seperti ini: RAILS_ENV = "produksi". Perhatikan tanda terjawab =.
Magne
Semua kerumitan konyol ini hanya supaya Anda bisa menggunakan tanda tanya?
Membuang Akun
31
ENV['RAILS_ENV']sekarang sudah ditinggalkan .
Anda harus menggunakan Rails.envyang jelas jauh lebih baik.
Sebelum Rails 2.x cara yang disukai untuk mendapatkan lingkungan saat ini adalah menggunakan RAILS_ENVkonstanta. Demikian juga, Anda dapat menggunakan RAILS_DEFAULT_LOGGERuntuk mendapatkan logger saat ini atauRAILS_ROOT untuk mendapatkan path ke folder root.
Mulai dari Rails 2.x, Rails memperkenalkan Railsmodul dengan beberapa metode khusus:
Rails.root
Rails.env
Rails.logger
Ini bukan hanya perubahan kosmetik. Modul Rails menawarkan kemampuan yang tidak tersedia menggunakan konstanta standar seperti StringInquirerdukungan. Ada juga sedikit perbedaan. Rails.roottidak mengembalikan Stringbuth sederhanaPath .
Bagaimanapun, cara yang disukai adalah menggunakan Railsmodul. Konstanta tidak digunakan lagi dalam Rails 3 dan akan dihapus dalam rilis mendatang, mungkin Rails 3.1.
Rails.env
adalah standar baruRAILS_ENV
yang sedang ditinggalkan.ENV['RAILS_ENV']
sekarang sudah ditinggalkan .Anda harus menggunakan
Rails.env
yang jelas jauh lebih baik.sumber
Sebelum Rails 2.x cara yang disukai untuk mendapatkan lingkungan saat ini adalah menggunakan
RAILS_ENV
konstanta. Demikian juga, Anda dapat menggunakanRAILS_DEFAULT_LOGGER
untuk mendapatkan logger saat ini atauRAILS_ROOT
untuk mendapatkan path ke folder root.Mulai dari Rails 2.x, Rails memperkenalkan
Rails
modul dengan beberapa metode khusus:Ini bukan hanya perubahan kosmetik. Modul Rails menawarkan kemampuan yang tidak tersedia menggunakan konstanta standar seperti
StringInquirer
dukungan. Ada juga sedikit perbedaan.Rails.root
tidak mengembalikanString
buth sederhanaPath
.Bagaimanapun, cara yang disukai adalah menggunakan
Rails
modul. Konstanta tidak digunakan lagi dalam Rails 3 dan akan dihapus dalam rilis mendatang, mungkin Rails 3.1.sumber
Rails.env
bekerja tanpa masalah.Perilaku aneh saat men-debug aplikasi saya: membutuhkan "active_support / notifikasi" (rdb: 1) p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "development"
Saya akan mengatakan bahwa Anda harus tetap berpegang pada satu atau yang lain (dan lebih disukai Rails.env)
sumber
Pembaruan: dalam Rails 3.0.9: metode env didefinisikan dalam railties / lib / rails.rb
sumber