मेरे पास कुछ ENV वैरिएबल हैं जो deploy
उपयोगकर्ता के लिए सोर्स किए गए हैं। (जैसा कि Heroku अनुशंसा करता है, लेकिन Heroku का उपयोग किए बिना।)
मेरा रेल ऐप कुछ कार्यों के लिए इन पर निर्भर करता है, उदाहरण के लिए, application.rb में:
config.action_mailer.default_url_options = { host: ENV['MY_HOST'] }
यह आवश्यक है क्योंकि हमारे पास कई स्टेजिंग होस्ट हैं। प्रत्येक होस्ट के पास MY_HOST
को उसके सही होस्टनाम के रूप में .bashrc
में परिभाषित किया गया है:
export MY_HOST="staging3.example.com"
यह हमें केवल एक रेल staging
वातावरण का उपयोग करने की अनुमति देता है, लेकिन अभी भी प्रत्येक होस्ट का सही होस्टनाम परीक्षण, ईमेल भेजने आदि के लिए उपयोग किया जाता है क्योंकि इसे प्रति-मशीन आधार पर सेट किया जा सकता है।
दुर्भाग्य से ऐसा लगता है कि जब मैं USR2
का उपयोग करके यूनिकॉर्न को पुनरारंभ करता हूं तो यह उन चरों में परिवर्तन नहीं उठाता है। हार्ड-स्टॉप और स्टार्ट करने से कोई भी बदलाव सही ढंग से लोड होगा।
मैं preload_app = true
का उपयोग कर रहा हूं, जिसका मैं अनुमान लगा रहा हूं कि इससे कुछ लेना-देना है। कोई विचार?
1 उत्तर
अंत में मैं एक app_config.yml फ़ाइल से अपने ऐप कॉन्फिगर को लोड करने के पक्ष में इस दृष्टिकोण से पूरी तरह से दूर चला गया। रयान बेट्स ने इस दृष्टिकोण को Railscast #226 में शामिल किया है।
केवल एक चीज जो मैंने अलग तरीके से की वह यह है कि मैं अपने द्वारा उपयोग किए जाने वाले प्रत्येक सर्वर के लिए एक साझा app_config.yml लोड करता हूं। चूंकि मैं कैपिस्ट्रानो का उपयोग कर रहा हूं, मैं बस तैनाती पर फ़ाइल को सिमलिंक करता हूं।
उदाहरण के लिए, स्टेजिंग 2 पर मेरा shared/configs/app_config.yml
इस तरह दिखता है:
staging:
host: "staging2.example.com"
... जबकि स्टेजिंग 3 पर ऐसा दिखता है:
staging:
host: "staging3.example.com"
अब मेरे application.rb
में इसके बजाय यह लाइन है:
config.action_mailer.default_url_options = { host: APP_CONFIG[:host] }
मैंने वास्तविक config/app_config.yml
को git से हटा दिया है ताकि यह तैनाती पर शामिल न हो। (मैंने इसे config/app_config.yml.template
में स्थानांतरित कर दिया।) फिर तैनाती पर मैं shared/configs/app_config.yml
को config/app_config.yml
से जोड़ने के लिए एक कैपिस्ट्रानो कार्य का उपयोग करता हूं:
namespace :deploy do
desc "Symlinks the app_config.yml"
task :symlink_app_config, :roles => [:web, :app, :db] do
run "ln -nfs #{deploy_to}/shared/config/app_config.yml #{release_path}/config/app_config.yml"
end
end
ईएनवी संस्करणों का उपयोग करने पर इस रणनीति के ये लाभ हैं:
- कैपिस्ट्रानो के माध्यम से सभी नोड्स में तैनात
- हम केवल उपयुक्त सर्वर पर फ़ाइल को बदलकर सशर्त होस्ट कर सकते हैं
- यूनिकॉर्न को USR2 के साथ बदलाव मिलेंगे क्योंकि सब कुछ रेल के अंदर किया गया है
- सब कुछ एक ही स्थान पर रखा गया है, और वातावरण कोडबेस के बाहर कुछ अन्य चर से प्रभावित नहीं होता है
जुड़े हुए प्रश्न
नए सवाल
ruby-on-rails
रूबी ऑन रेल्स रूबी में लिखा गया एक ओपन सोर्स फुल-स्टैक वेब एप्लिकेशन फ्रेमवर्क है। यह लोकप्रिय एमवीसी फ्रेमवर्क मॉडल का अनुसरण करता है और इसे "कॉन्फिगरेशन ओवर कॉन्फिगरेशन" अप्रोच डेवलपमेंट के दृष्टिकोण के लिए जाना जाता है।