2010-04-19 15 views
12

मैं सोच रहा था कि रेल ऐप में वैश्विक सेटिंग्स को कहां स्टोर करना है, इस पर सबसे अच्छा अभ्यास है। मेरा मतलब यह है कि i.e: मेरे पास कुछ ग्लोबल्स परिभाषित हैं जो बदल सकते हैं, लेकिन संभावना नहीं है और उन्हें डीबी में स्टोर करने के लिए अनुचित लगता है क्योंकि उनका उपयोग बहुत अधिक होता है। उदाहरण के लिए मेरे पास SYSTEM_EMAIL & SYSTEM_EMAIL_SIGNATURE & SYSTEM_STORAGE_ROOT है।रेल ऐप में ग्लोबल्स स्टोर करने के लिए सबसे अच्छी जगह कहां है?

अभी मैं उन्हें पर्यावरण में रखता हूं। आरबी, लेकिन मुझे यकीन नहीं है कि यह उन्हें स्टोर करने के लिए सही जगह है या नहीं।

धन्यवाद

संपादित करें:

स्वीकृत जवाब अभी भी कायम रूप में उपयुक्त है, तथापि मैं के बाद से https://github.com/markbates/configatron का उपयोग कर पर चले गए, देखते हैं अन्य विकल्प लेकिन मैं configatron सबसे अच्छा लगता है।

उत्तर

15

मेरी पसंदीदा तकनीकों में से एक निर्देशिका में config/initializers/ (इस निर्देशिका में सभी फाइलें स्वचालित रूप से लोड की गई हैं) में स्थिरांक वाली फ़ाइल डालना है, लेकिन प्रत्येक अलग रेल पर्यावरण के लिए एक अनुभाग के साथ। जैसे


case ENV['RAILS_ENV'] 
    when "development" 
    SYSTEM_EMAIL = ... 
    SYSTEM_EMAIL_SIGNATURE = ... 
    when "staging" 
    SYSTEM_EMAIL = ... 
    SYSTEM_EMAIL_SIGNATURE = ... 
    when "production" 
    SYSTEM_EMAIL = ... 
    SYSTEM_EMAIL_SIGNATURE = ... 
end 

यदि आप चाहते हैं, बजाय, ऊपर एक बड़ा हैश में सभी स्थिरांक लोड करने के लिए तो आप उन्हें एक YAML फ़ाइल के रूप में लोड कर सकते हैं। दो फाइलें बनाएं, जिन्हें कहा जाता है, config/initializers/email_constants.rb और अन्य config/email_constants.yml। की तरह बाद के पुट कुछ में:


development: 
    :system_email: ... 
    :system_email_signature: ... 
staging: 
    :system_email: ... 
    system_email_signature: ... 

... etc ... 

फिर config/initializers/email_constants.rb पुट में:


EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV] 

यह EMAIL_CONSTANTS करने के लिए पूरे YAML फ़ाइल और प्रदान उचित कुंजी का मान (जो RAILS_ENV प्रतिनिधित्व करता है) लोड करता है।

इन दोनों तकनीकों का लाभ इलाका है। आप एक ही फाइल में एक दूसरे से संबंधित सभी स्थिरांक (यानी इस मामले में ईमेल स्थिरांक) रख सकते हैं। इसके अलावा, एक ही स्थिरांक रखने के बजाय तीन अलग-अलग फाइलों में फैला हुआ है (प्रत्येक रेल पर्यावरण के लिए एक) आपके पास एक ही फाइल में है।

+0

धन्यवाद शॉन। मुझे पसंद है कि आप सबसे ज्यादा संपर्क करें - सिवाय मुझे नहीं लगता कि मुझे ईमेल_कॉन्स्टेंट्स.आईएमएल में अलग करने की ज़रूरत है - मैं बस सबकुछ contacnts.yml में रखूंगा – konung

1

पर्यावरण.आरबी जगह है। आप इसे मॉड्यूल में जोड़ सकते हैं और इसे lib निर्देशिका में जोड़ सकते हैं। तो आप इसे मॉड्यूल :: MY_GLOBAL_VARIABLE के रूप में कॉल कर सकते हैं। दोनों में मजबूत अंक और कमजोर अंक हैं। पर्यावरण में। आरबी ठीक है लेकिन कभी-कभी यह गन्दा दिखता है। यदि वे सभी वैश्विक चर संबंधित हैं, तो आप मॉड्यूल में समूह कर सकते हैं।

2

रेल 3 एप्लिकेशन ऑब्जेक्ट पेश करता है। रेल 2 के साथ भी, आप अपने ग्लोबल्स को इसी तरह से स्टोर करना चाहेंगे।

+0

दिलचस्प है, मैं रेल 3 हाल ही में पर तलाश शुरू कर दी - विशेष रूप से मार्ग, लेकिन बहुत कुछ नहीं पढ़ा है। मैं देखूंगा। पॉइंटर मार्क – konung

10

क्योंकि आपके द्वारा चलाए जा रहे पर्यावरण के आधार पर ऐसे मान अक्सर बदलते हैं, मैं प्रत्येक वातावरण के लिए उपयुक्त मानों के साथ config/environments/development.rb|production.rb|test.rb में ग्लोबल्स स्टोर करता हूं।

+0

के लिए धन्यवाद कैसे स्थिरांक के बारे में dev/prod/test में समान होना चाहिए? उन्हें तीनों में संग्रहित करने की बजाय, क्या एक ऐसी फाइल है जो सभी तीन वातावरणों पर लागू होती है? – LikeMaBell

+0

मेरी अपनी टिप्पणी का जवाब /config/environment.rb लगता है। अगर मैं गलत हूं तो कृपया मुझे सही करें। – LikeMaBell

+0

हाँ, यह है। – Ben

1

मैं ऐसी कॉन्फ़िगरेशन जानकारी को वाईएमएल फ़ाइल में संग्रहीत करता हूं। अधिक जानकारी के लिए इस screen-cast का संदर्भ लें।

वैकल्पिक रूप से आप app_config नामक एक मणि का उपयोग कर सकते हैं।

1

आम तौर पर जब मैं कुछ इस तरह कर रहा हूँ, मैं इस

1 करने के दो तरीके हैं - मेरी वैश्विक चर सभी 3 वातावरण (विकास, परीक्षण, उत्पादन) के लिए आम हैं, तो मैं इसे स्टोर करेगा मेरे विकास के वातावरण SYSTEM_STORAGE_ROOT है '/ development_root /' और परीक्षण वातावरण SYSTEM_STOR:

config/environments.rb फ़ाइल में

लेकिन कहते हैं कि मेरी मूल्यों पर्यावरण

पूर्व पर बदल रहे हैं की सुविधा देता है AGE_ROOT '/ testing_root /'

तो मैं उन्हें

config/वातावरण के अंदर/स्टोर करेगा

ऊपर के उदाहरण प्रति

config/वातावरण/development.rb रूप SYSTEM_STORAGE_ROOT होगा = '/ development_root /'

config/वातावरण/test.rb SYSTEM_STORAGE_ROOT होगा = '/ testing_root /'

config/वातावरण/production.rb SYSTEM_STORAGE_ROOT = होगा '/ production_root /'

आशा है कि यह मदद करता है,

चियर्स, समीरा

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

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