8

एक छोटी सी झुंझलाहट के रूप में क्या शुरू कर दिया में ENV चर कैशिंग initializers हैं अब एक सिरदर्द में बदल गया है। मैं एक रेल 4 ऐप बना रहा हूं और कॉन्फ़िगरेशन के लिए एक प्रोफाइल और .env फ़ाइल के साथ अपने देव सेटअप के लिए फोरमैन का उपयोग कर रहा हूं। जब मैं .env फ़ाइल में एक ENV चर सेट करता हूं, तो यह मेरे ऐप द्वारा सही ढंग से उठाया जाता है। इस मामले में मैं प्रारंभिक में पेपरक्लिप के लिए कुछ ENV विकल्प सेट कर रहा हूं।क्यों मेरी रेल कंसोल (फोरमैन, देव env)

जब मैं एनएनवी चर के मान को बदलने के लिए जाता हूं तो समस्या सतह होती है। कंसोल में, यदि मैं ENV ["MY_VAR"] टाइप करता हूं, तो यह नया मान दिखाता है। हालांकि, मेरे प्रारंभकर्ता में उपयोग किया जाने वाला मान, जो संभवतः चलाया गया था जब मैंने कंसोल शुरू किया था, पुराना मान दिखाता है! कहीं भी मेरी परियोजना में पुराना मूल्य कहीं भी सूचीबद्ध नहीं है। इससे मुझे विश्वास होता है कि पर्यावरण किसी भी तरह से कैश किया जा रहा है या एनवी चर को मेरे खोल में निर्यात किया जा रहा है। मैं देखने के लिए स्थानों से बाहर भाग रहा हूं ताकि किसी भी मदद की सराहना की जा सके! मैं रूबी 1.9.3-पी 374 और रेल 4.1.0 के साथ एक मैक (10.9.4) पर विकास कर रहा हूं।

उदाहरण:

रूट/.env

S3_BUCKET=mybucket 

config/initializers/paperclip.rb

Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]} 

करने के लिए "newbucket" और चलाने "फोरमैन मैं S3_BUCKET का मूल्य बदलते हैं तो चलाने रेल ग "या" रेल ग "कंसोल में प्रवेश करने की, तो ऐसा होता है:

ENV["S3_BUCKET"] # => "newbucket" 
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'} 

मुझे यह उल्लेख करना चाहिए कि यह व्यवहार मेरे वर्गों में भी होता है जिसे मैंने/lib में रखा है। मुझे कल्पना है कि यह सब मूर्खतापूर्ण है क्योंकि मैंने अनदेखा किया है। कोई विचार?

+0

यदि आप अपने env vars को बदलते हैं और अपना एप्लिकेशन उन्हें चुनना चाहते हैं, तो आपको ऐप को पुनरारंभ करना होगा। यह हमेशा मामला रहा है। – nzifnab

+0

हां, ज़ाहिर है। यद्यपि स्पष्टीकरण के लिए, ऐप को पुनरारंभ करने के बाद, प्रारंभकर्ताओं में परिवर्तन नहीं उठाए जाते हैं, लेकिन उन्हें ENV हैश में उठाया जाता है। – Spencer

+0

क्या आप किसी भी मौके से 'वसंत' का उपयोग कर रहे हैं? (अपने Gemfile की जांच करें।) – fny

उत्तर

24

आप रेल 4 उपयोग कर रहे हैं बॉक्स से बाहर है, यह एक मणि इरादा पृष्ठभूमि में अपने आवेदन का एक उदाहरण पहले से लोड होने और अपने कोड और विन्यास के रूप में यह पुन: लोड करके अपने जीवन को आसान बनाने के लिए है कि Spring कहा जाता है के साथ आता है फाइलें बदलती हैं।

स्प्रिंग, हालांकि, सिर्फ रेल 'डिफ़ॉल्ट विन्यास फाइल, पर नज़र रखता है ताकि आप अतिरिक्त कोई अन्य फ़ाइल आप एक बार पुनः लोड करने को गति प्रदान करना चाहते हैं की निगरानी के लिए वसंत को कॉन्फ़िगर करना होगा।

वसंत कस्टम सेटिंग्स के लिए ~/.spring.rb और config/spring.rb पढ़ता है। आप बदलाव के लिए अपने .env फ़ाइल देखने के लिए अपनी पसंद के फ़ाइल में निम्नलिखित पंक्ति जोड़ जोड़ सकते हैं:

Spring.watch '.env' 

अधिक जानकारी के लिए README में Spring's configuration documentation देखें।

+0

शानदार, धन्यवाद! ऐसा लगता है कि मुझे अपग्रेड नोट्स को थोड़ा और सावधानी से पढ़ना चाहिए था :-)। – Spencer

+4

ओएमएफजी ... मैं सोच रहा था कि क्यों कंसोल को पुनरारंभ करना परिवर्तनों को नहीं उठाएगा, भले ही मैंने flipp'n फ़ाइल को हटा दिया हो! मुझे टर्मिनल को पूरी तरह बंद करना पड़ा। इसके लिए धन्यवाद! बिल्कुल गड़बड़ाना – manafire

+1

जो मैं बता सकता हूं, कॉन्फ़िगर/प्रारंभकर्ता इस फिक्स के साथ भी पुनः लोड नहीं किए गए हैं। यहां देखें: https://github.com/rails/spring/issues/378 – stevo

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