2010-04-26 2 views
188

मैं उदाहरणों में दोनों को देखता हूं कि यह जांचते समय कि क्या env कोई चल रहा है। क्या पसंद है? क्या वे सभी उद्देश्यों और उद्देश्यों के बराबर हैं?Rails.env बनाम RAILS_ENV

उत्तर

333

According to the docs, #Rails.envRAILS_ENV लपेटता:

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

लेकिन, देखने में विशेष रूप से यह कैसे लिपटे है, ActiveSupport::StringInquirer का उपयोग कर:

इस वर्ग में एक स्ट्रिंग रैपिंग के लिए आप एक खूबसूरत रास्ता देती है समानता के लिए परीक्षण।

Rails.env == "production" 

आप इस कॉल कर सकते हैं:

Rails.env.production? 

तो वे बिल्कुल नहीं हैं Rails.env द्वारा दिए गए मान इस बुला की तो बजाय एक StringInquirer वस्तु में लपेटा जाता है समकक्ष, लेकिन वे काफी करीब हैं। मैंने अभी तक रेल का उपयोग नहीं किया है, लेकिन मैं कहूंगा कि #Rails.envStringInquirer का उपयोग करने के कारण निश्चित रूप से अधिक दृश्यमान विकल्प है।

+0

अच्छा स्पष्टीकरण, thx! मैं यह भी खोजने की कोशिश कर रहा हूं कि RAILS_ENV को परिभाषित किया गया है? कोई उपाय?? – brad

+0

Rails.env का उपयोग करना पसंद है। – Ben

+65

यह उल्लेखनीय है कि 'Rails.env' नया मानक है क्योंकि 'RAILS_ENV' को बहिष्कृत किया जा रहा है। –

28

रेल 2.x से पहले वर्तमान वातावरण प्राप्त करने का पसंदीदा तरीका RAILS_ENV निरंतर उपयोग कर रहा था। इसी प्रकार, रूट फ़ोल्डर के पथ को पाने के लिए वर्तमान लॉगर या RAILS_ROOT प्राप्त करने के लिए आप RAILS_DEFAULT_LOGGER का उपयोग कर सकते हैं।

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

यह प्रतिसाद नहीं:

रेल 2.x से शुरू करते हुए रेल कुछ विशेष तरीकों के साथ Rails मॉड्यूल शुरू सिर्फ एक कॉस्मेटिक बदलाव नहीं है। रेल मॉड्यूल क्षमता प्रदान करता है मानक मानक स्थिरांक जैसे StringInquirer समर्थन का उपयोग कर उपलब्ध नहीं है। कुछ मामूली मतभेद भी हैं। Rails.root एक साधारण String buth Path उदाहरण वापस नहीं करता है।

वैसे भी, पसंदीदा तरीका Rails मॉड्यूल का उपयोग कर रहा है। कॉन्स्टेंट को रेल 3 में बहिष्कृत किया गया है और भविष्य में रिलीज में हटा दिया जाएगा, शायद रेल 3.1।

+1

एफवाईआई, जिस पर चर्चा की गई थी [यहां] (http://stackoverflow.com/questions/4411708/rails-env-undefined-in-rails-2), ऐसा लगता है कि उन तरीकों को रेल 2.3 में 2.0 में पेश किया गया था, 2.0 नहीं। – jrdioko

+0

हम एक परियोजना पर 2.1.2 का उपयोग कर रहे हैं। 'Rails.env' किसी समस्या के बिना काम करता है। –

1

अजीब व्यवहार जबकि मेरी एप्लिकेशन डिबगिंग: p ENV [ 'RAILS_ENV'] "परीक्षण" (RDB: 1) पी Rails.env "विकास"

: "active_support/सूचनाएं" (1 RDB) की आवश्यकता होती है

मैं कहूंगा कि आप एक या एक और (और अधिमानतः Rails.env) से चिपके चाहिए

2

अद्यतन: रेल 3.0.9 में: env विधि railties/lib/रेल में परिभाषित किया।आरबी

20

ENV['RAILS_ENV'] अब बहिष्कृत है।

आपको Rails.env का उपयोग करना चाहिए जो स्पष्ट रूप से बहुत अच्छा है।

संबंधित मुद्दे