हार्डकोड संवेदनशील जानकारी (खाता क्रेडेंशियल्स, पासवर्ड, आदि) कभी नहीं । इसके बजाय, उस जानकारी को पर्यावरण चर (कुंजी / मान जोड़े) के रूप में संग्रहीत करने के लिए एक फ़ाइल बनाएं, और उस फ़ाइल को अपने स्रोत कोड प्रबंधन प्रणाली से बाहर करें। उदाहरण के लिए, Git (स्रोत कोड प्रबंधन प्रणाली) के संदर्भ में, उस फ़ाइल को इसमें जोड़कर बाहर करें। gitignore :
-bash> echo '/config/app_environment_variables.rb' >> .gitignore
/config/app_environment_variables.rb
ENV['HTTP_USER'] = 'devuser'
ENV['HTTP_PASS'] = 'devpass'
साथ ही, रेखा और रेखा के /config/environment.rb
बीच निम्न रेखाएँ जोड़ें :require
Application.initialize
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
load(app_environment_variables) if File.exists?(app_environment_variables)
बस!
जैसा कि ऊपर टिप्पणी में कहा गया है, ऐसा करने से आप पहले अपने पर्यावरण चर को लोड कर रहे होंगे environments/*.rb
, जिसका अर्थ है कि आप उन फ़ाइलों (जैसे environments/production.rb
) के अंदर अपने चर का उल्लेख करने में सक्षम होंगे । यह आपके पर्यावरण चर फ़ाइल को अंदर रखने से अधिक लाभ है /config/initializers/
।
अंदर के app_environment_variables.rb
वातावरण को विकास या उत्पादन से अलग करने की आवश्यकता नहीं है क्योंकि आप इस फाइल को कभी भी अपने स्रोत कोड प्रबंधन प्रणाली में शामिल नहीं करेंगे, इसलिए यह डिफ़ॉल्ट रूप से विकास के संदर्भ में है। लेकिन अगर आप के लिए सेट के लिए कुछ खास करने की जरूरत परीक्षण वातावरण (या अवसरों जब आप परीक्षण के लिए उत्पादन मोड स्थानीय स्तर पर ), बस एक सशर्त खंड जोड़ें नीचे अन्य सभी चर:
if Rails.env.test?
ENV['HTTP_USER'] = 'testuser'
ENV['HTTP_PASS'] = 'testpass'
end
if Rails.env.production?
ENV['HTTP_USER'] = 'produser'
ENV['HTTP_PASS'] = 'prodpass'
end
जब भी आप अपडेट करें app_environment_variables.rb
, ऐप सर्वर को पुनरारंभ करें। यह मानते हुए कि आप अपाचे / यात्री की पसंद का उपयोग कर रहे हैं या rails server
:
-bash> touch tmp/restart.txt
अपने कोड में, पर्यावरण चर को निम्नानुसार देखें:
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS']
end
end
ध्यान दें कि app_environment_variables.rb
आपको बूलियनों और संख्याओं को तार के रूप में निर्दिष्ट करना होगा (जैसे ENV['SEND_MAIL'] = 'false'
न सिर्फ false
, और ENV['TIMEOUT'] = '30'
न सिर्फ 30
), अन्यथा आपको क्रमशः त्रुटियां can't convert false into String
और मिलेंगी can't convert Fixnum into String
।
भंडारण और संवेदनशील जानकारी साझा करना
टाई करने के लिए अंतिम गाँठ है: अपने ग्राहकों और / या भागीदारों के साथ इस संवेदनशील जानकारी को कैसे साझा करें? व्यावसायिक निरंतरता के उद्देश्य से (अर्थात जब आप एक गिरते हुए सितारे की चपेट में आते हैं, तो आपके ग्राहक और / या साझेदार साइट से कैसे फिर से शुरू होंगे?), आपके ग्राहकों और / या भागीदारों को आपके ऐप द्वारा आवश्यक सभी क्रेडेंशियल्स को जानना होगा। । इन चीज़ों को ईमेल / स्केपिंग करना असुरक्षित है और अव्यवस्था की ओर ले जाता है। साझा Google डॉक्स में इसे स्टोर करना बुरा नहीं है (यदि हर कोई https का उपयोग करता है), लेकिन पासवर्ड जैसे छोटे टाइटल को स्टोर करने और साझा करने के लिए समर्पित ऐप आदर्श होगा।
हरोकू पर पर्यावरण चर कैसे सेट करें
यदि आपके पास हरोकू पर एक ही वातावरण है:
-bash> heroku config:add HTTP_USER='herouser'
-bash> heroku config:add HTTP_USER='heropass'
यदि आपके पास हरोकू पर कई वातावरण हैं :
-bash> heroku config:add HTTP_USER='staguser' --remote staging
-bash> heroku config:add HTTP_PASS='stagpass' --remote staging
-bash> heroku config:add HTTP_USER='produser' --remote production
-bash> heroku config:add HTTP_PASS='prodpass' --remote production
फोरमैन और .vv
कई डेवलपर्स अपने एप्स को स्थानीय रूप से चलाने के लिए फोरमैन ( हेरोकू टूलबेल्ट के साथ स्थापित ) का उपयोग करते हैं (जैसा कि अपाचे / यात्री या पसंद करने के लिए विरोध किया जाता है )। फोरमैन और हरोकू यह घोषित करने के लिए उपयोग करते हैं कि आपके एप्लिकेशन द्वारा क्या आदेश चलाए जा रहे हैं , इसलिए स्थानीय देव से हरोकू में संक्रमण उस संबंध में निर्बाध है। मैं हर रेल परियोजना में फोरमैन और हरोकू का उपयोग करता हूं, इसलिए यह सुविधा बहुत अच्छी है। लेकिन यहाँ बात है .. फोरमैन डॉट एनवाई के माध्यम से संग्रहीत पर्यावरण चर को लोड करता है लेकिन दुर्भाग्य से डॉटेनव अनिवार्य रूप से केवल जोड़े के लिए फ़ाइल को पार्स करता हैrails server
Procfile
/.env
key=value
; वे जोड़े अभी वहां चर नहीं बनते हैं और इसलिए, आप पहले से ही चर (चीजें डीआरवाई रखने के लिए) का उल्लेख नहीं कर सकते हैं, और न ही आप वहां "रूबी" कर सकते हैं (जैसा कि सशर्त ऊपर उल्लेख किया गया है), जिसे आप कर सकते हैं में करते हैं /config/app_environment_variables.rb
। उदाहरण के लिए, चीजें रखने के मामले में DRY मैं कभी-कभी इस तरह से सामान करता हूं:
ENV['SUPPORT_EMAIL']='Company Support <support@company.com>'
ENV['MAILER_DEFAULT_FROM'] = ENV['SUPPORT_EMAIL']
ENV['MAILER_DEFAULT_TO'] = ENV['SUPPORT_EMAIL']
इसलिए, मैं फोरमैन का उपयोग अपने ऐप्स को स्थानीय रूप से चलाने के लिए करता हूं, लेकिन मैं इसकी .env
फ़ाइल का उपयोग पर्यावरण चर को लोड करने के लिए नहीं करता हूं ; बल्कि मैं /config/app_environment_variables.rb
ऊपर वर्णित दृष्टिकोण के साथ संयोजन के रूप में फोरमैन का उपयोग करता हूं ।
export admin_password="secret"
, नहींexport admin_password = "secret"
।