Rails.env बनाम RAILS_ENV


219

मैं दोनों उदाहरणों में देखता हूं कि चेक करते समय env one क्या चल रहा है। क्या पसंद है? क्या वे सभी इरादों और उद्देश्यों के लिए समान हैं?

जवाबों:


370

डॉक्स के अनुसार , #Rails.envलपेटता है RAILS_ENV:

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

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

इस वर्ग में एक तार लपेटना आपको समानता के लिए परीक्षण करने का एक प्रारंभिक तरीका देता है। Rails.env द्वारा दिया गया मान StringInquirer ऑब्जेक्ट में लपेटा जाता है इसलिए इसे कॉल करने के बजाय:

Rails.env == "production"

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

Rails.env.production?

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


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

70
यह ध्यान देने योग्य Rails.envहै कि नए मानक के रूप RAILS_ENVमें पदावनत किया जा रहा है।
रयान बिग बिग

4
रयान, एक कमांड लाइन पर, आप Rails.env का उपयोग नहीं कर सकते। तो अगर यह जल्द ही पदावनत हो रहा है, तो आप सीएलआई पर क्या इस्तेमाल करेंगे?
pjammer

8
Rails.env.production का उपयोग करना? वास्तव में इस तरह से पर्यावरण को बदलने वाले टाइपोस के खिलाफ आपको सुरक्षित करता है: RIDS_ENV = "उत्पादन"। मिस = चिन्ह पर ध्यान दें।
मैग्ने

यह सब हास्यास्पद जटिलता सिर्फ इसलिए कि आप एक प्रश्न चिह्न का उपयोग कर सकते हैं?
थ्रो अवे अकाउंट

31

ENV['RAILS_ENV']अब पदावनत हो गया है

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


29

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

रेल 2.x से शुरू, रेल ने Railsकुछ विशेष विधियों के साथ मॉड्यूल पेश किया :

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

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

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


1
FYI करें, जो यहां चर्चा की गई थी , यह लगता है कि उन तरीकों को रेल 2.3, 2.0 में नहीं पेश किया गया था।
jrdioko

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

2

मेरे ऐप को डीबग करते समय अजीब व्यवहार: इसके लिए "active_support / सूचनाएं" (rdb: 1) p ENV ['RAILS_ENV'] "परीक्षण" (rdb: 1) p Rails.env "विकास" की आवश्यकता होती है

मैं कहूंगा कि आपको एक या दूसरे से चिपके रहना चाहिए (और अधिमानतः रेल्सन)


2

अद्यतन: रेल 3.0.9 में: रेल / रेलवे / परिशिष्ट / रेल में परिभाषित विधि

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.