मेरे पर्यावरण में, परिनियोजन सर्वर में डेटाबेस कनेक्शन में अधिकांश कनेक्शन जानकारी होती है। यही है, वे जानते हैं कि वे विकास, परीक्षण या उत्पादन सर्वर हैं, और वे अपनी संबंधित डेटाबेस कनेक्शन जानकारी जानते हैं।डेटाबेस.आईएमएल ओवरराइड करने के लिए रणनीतियां?
मैं उदाहरण के लिए एक सर्वर कक्षा में इस जानकारी को संपुटित कर सकते हैं, ताकि मैं जानकारी पुनः प्राप्त कर सकते हैं:
Server["environment"] #=> production
Server["db_host"] #=> db5.example.com
Server["db_password"] #=> [a decrypted password]
और इतने पर। मैं एक रेल एप्लिकेशन को तैनात करना चाहता हूं और इसे सर्वर सेटिंग्स के आधार पर स्वत: कॉन्फ़िगर करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?
एक तरीका यह है करने के लिए अपने database.yml में Erb है:
<%= Server["environment"] %>:
adapter: oracle_enhanced
host: <%= Server["db_host"] %>
username: db_user
password: <%= Server["password"] %>
मैं इसे इस तरह से करने के बारे में भी रोमांचित नहीं हूँ, लेकिन यह काम करेगा। इस मामले में, मैं 'server.rb' कहां रखूंगा जो सर्वर क्लास को परिभाषित करता है - इसे येल में यहां चाहिए? ActiveRecord लोड डेटाबेस.yml के बाद ऐप/प्रारंभकर्ता लोड हो जाता है।
# File railties/lib/initializer.rb, line 903
def database_configuration
require 'erb'
YAML::load(ERB.new(IO.read(database_configuration_file)).result)
end
ऊपर केवल तभी कहा जाता है:: active_record config.frameworks में परिभाषित किया गया है
एक अन्य संभावित समाधान किसी भी तरह railties 'डेटाबेस प्रारंभकर्ता ओवरराइड करने के लिए है। मुझे यकीन नहीं है कि मैं रेल स्टार्टअप अनुक्रम में पर्याप्त जल्दी से ओवरराइड करने के बारे में कैसे जाउंगा।
शायद एक तीसरा विकल्प को हटाएं: config.frameworks से active_record, और बाद में कनेक्शन बनाएं, ऐप प्रारंभकर्ताओं में कहें? मुझे डर है कि इसमें बहुत से अनपेक्षित साइड इफेक्ट्स हो सकते हैं।
मैं की उम्मीद कर रहा हूं कि कुछ सरल और स्पष्ट है कि मुझे कोई ActiveRecord सुविधा नहीं मिली है जो मुझे डेटाबेस.इएमएल से ऑप्ट आउट करने और प्रोग्रामेटिक रूप से वैकल्पिक कॉन्फ़िगरेशन प्रदान करने की अनुमति देती है।
निर्मित एक समाधान के लिए मेरे आशा धराशायी कर रहा है। स्पष्ट रूप से कुछ साल पहले रेल की कोर टीम पर एक पैच पर चर्चा हुई जिसने डेटाबेस.आईएमएल के लिए रूबी विकल्प प्रदान किया था, और इसका कुछ समर्थन था, लेकिन इसे खारिज कर दिया गया था। http://www.mail-archive.com/[email protected]/msg06694.html –
नोट: रेल 3.1.2 के रूप में, 'डेटाबेस_configuration' विधि' रेल :: अनुप्रयोग :: कॉन्फ़िगरेशन 'में स्थित है । पिछले संस्करणों में, यह 'रेल :: कॉन्फ़िगरेशन' में था। –