Rails.env vs RAILS_ENV


219

Hangi env içinde çalıştığını kontrol ederken her iki örnekte de görüyorum. Tercih edilen nedir? Bütün niyet ve amaçlar için eşit mi?

Yanıtlar:


370

Dokümanlara göre , #Rails.envsarar RAILS_ENV:

    # File vendor/rails/railties/lib/initializer.rb, line 55
     def env
       @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
     end

Ancak, aşağıdakileri kullanarak özellikle nasıl sarıldığına bakın ActiveSupport::StringInquirer:

Bu sınıfta bir dize sarmak, eşitliği test etmenin daha güzel bir yolunu sunar. Rails.env tarafından döndürülen değer, bunu çağırmak yerine bir StringInquirer nesnesine sarılır:

Rails.env == "production"

buna şöyle diyebilirsiniz:

Rails.env.production?

Yani tam olarak eşdeğer değiller, ama oldukça yakınlar. Rails'i henüz çok fazla kullanmadım, ama #Rails.envkesinlikle görsel olarak daha çekici bir seçenek olduğunu söyleyebilirim StringInquirer.


güzel açıklama, teşekkürler! Ayrıca RAILS_ENV nerede tanımlanmış bulmaya çalışıyorum? Herhangi bir fikir??
brad

70
Kullanımdan kaldırıldığı Rails.envgibi yeni standart olduğunu da belirtmek gerekir RAILS_ENV.
Ryan Bigg

4
Ryan, komut satırında Rails.env dosyasını kullanamazsınız. yani yakında kullanımdan kaldırılıyorsa CLI'de ne kullanırsınız?
pjammer

8
Rails.env.production mı kullanıyorsunuz? ortamı gerçekten şu şekilde değiştiren yazım hatalarına karşı korur: RAILS_ENV = "üretim". Kaçırılan = işaretine dikkat edin.
Magne

Tüm bu saçma karmaşıklık sadece bir soru işareti kullanabilirsiniz?
Deplasman Hesabı

31

ENV['RAILS_ENV']artık kullanımdan kaldırıldı .

Rails.envAçıkça çok daha güzel olanı kullanmalısınız .


29

Rails 2.x öncesinde mevcut ortamı elde etmenin tercih edilen yolu RAILS_ENVsabiti kullanmaktı . Aynı şekilde, RAILS_DEFAULT_LOGGERgeçerli günlükçüyü RAILS_ROOTalmak veya kök klasörün yolunu almak için de kullanabilirsiniz .

Rails 2.x'ten başlayarak, Rails Railsmodülü bazı özel yöntemlerle tanıttı :

  • Rails.root
  • Rails.env
  • Rails.logger

Bu sadece kozmetik bir değişiklik değil. Rails modülü, StringInquirerdestek gibi standart sabitler kullanılarak bulunmayan özellikler sunar . Bazı ufak farklılıklar da var. Rails.rootbasit Stringbir Pathörnek vermez .

Her neyse, tercih edilen yol Railsmodülü kullanmaktır . Sabitler Rails 3'te kullanımdan kaldırılmıştır ve gelecekteki bir sürümde, belki de Rails 3.1'de kaldırılacaktır.


1
FYI, burada tartışılanlardan , bu yöntemlerin Rails 2.3'de değil, 2.0'da tanıtıldığı anlaşılıyor.
jrdioko

Bir projede 2.1.2 kullanıyoruz. Rails.envsorunsuz çalışır.
Benjamin Oakes

2

Uygulamamda hata ayıklarken garip davranışlar: "active_support / notifications" (rdb: 1) p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "geliştirme"

Birine ya da diğerine (ve tercihen Rails.env) bağlı kalmanız gerektiğini söyleyebilirim


2

Güncelleme: Rails 3.0.9'da: railties / lib / rails.rb'de tanımlanan env yöntemi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.