2013-08-03 9 views
6

में किसी फ़ाइल से चर में पढ़ना क्या पर्यावरण चर के किसी फ़ाइल में पढ़ने का कोई तरीका है?रुबी

बैश में मैं एक फ़ाइल env.sh कि मैं उपयोग कर सकते हैं

env.sh

foo="bar" 

बैश फ़ाइल

set -a 
source env.sh 

यह मैं बस के रूप में अगर foo का उपयोग करने की अनुमति होगी मैंने इसे रूबी लिपि में डेल किया था।

क्या यह सुनिश्चित करने का कोई तरीका है कि यह फ़ाइल अपठनीय है ताकि पासवर्ड इस फ़ाइल में संग्रहीत किया जा सके?

+0

नाम/मूल्य जोड़े की एक फ़ाइल को पार्स करना आसान है। आपने क्या प्रयास किया है और, आप फ़ाइल को किसके लिए अपठनीय बनाना चाहते हैं? –

+0

@theTinMan मैंने अभी तक फ़ाइल के लिए कुछ भी कोशिश नहीं की है, मैंने एक त्वरित Google खोज की है और जो कुछ भी मैं ढूंढ रहा था उससे मेल नहीं खा रहा था इसलिए मैंने पूछा कि क्या यह संभव है और किसी के लिए अपठनीय है जो मालिक नहीं है फ़ाइल –

उत्तर

4

ऐसा लगता है उपयोगकर्ता/व्यवस्थापक अपने निजी वातावरण के लिए संशोधित करने के लिए के लिए है कि आप फ़ाइल उदाहरण प्रदान करना चाहिए, और फिर उस से पर्यावरण को पॉप्युलेट जबकि, शायद, उस फ़ाइल को एक भंडार में संवेदनशील जानकारी के साथ रखने से बचें। नोट: फ़ाइल फ़ाइल स्थित है और आपके ऑपरेटिंग सिस्टम, और सर्वर सॉफ़्टवेयर द्वारा प्रति फ़ाइल सुरक्षा को संबोधित किया जा रहा है।

यदि ऐसा है, तो आप एक ऐसी फाइल प्रदान कर सकते हैं जिसमें आपके द्वारा कॉन्फ़िगर किए जा रहे प्रोग्राम के व्यवस्थापक/उपयोगकर्ता से आपको किस प्रकार की चीजों की आवश्यकता होगी।

रूबी ENV स्थिर है जो Hash जैसा कार्य करता है और आपके द्वारा उपयोग किए जा रहे खोल का वातावरण रखता है।

उदाहरण के तौर पर, पर्यावरण.आरबी.sample नामक एक फ़ाइल है जिसे सार्वजनिक रूप से किसी के साथ साझा किया जाता है। इसमें निर्देश हैं और फ़ाइल को कॉपी करने के निर्देशों के साथ environment.rb पर निर्देशों के साथ उपयोगकर्ता टेम्पलेट को स्वतंत्र रूप से संशोधित कर सकते हैं। ,

# environment.rb.sample 
# Copy this file to environment.rb and change the name and password to your credentials 
ENV['temp_user_name'] = 'Foo Bar' 
ENV['temp_password'] = 'Dazz Kezz 

फ़ाइल तो इस पर कॉपी किया है शायद: नमूना फ़ाइल इस तरह दिखता है

# environment.rb 
ENV['temp_user_name'] = 'Joe Admin' 
ENV['temp_password'] = 'Super Secure Password' 

फ़ाइल है कि इस लोड करता है और यह सिर्फ एक रूबी फ़ाइल है कि स्वतंत्र रूप से द्वारा संशोधित किया गया है है का उपयोग करता है सॉफ़्टवेयर के उपयोगकर्ता/व्यवस्थापक, और ऐसा दिखता है और सार्वजनिक रूप से भी साझा किया जाता है।

# load_environment 
require './environment' 
puts ENV['temp_user_name'] 
puts ENV['temp_password'] 

इस फ़ाइल में लोड करता है और ENV है कि एक विश्व स्तर पर आवेदन के लिए निरंतर scoped उपयोग करता है।

फ़ाइल अनुमतियों को तब सिस्टम के उपयोगकर्ता/व्यवस्थापक द्वारा प्रबंधित किया जाता है और उनके सिस्टम पर किसी भी अन्य संवेदनशील जानकारी की तरह सुरक्षित किया जाता है। संवेदनशील फ़ाइल को भंडार की अनदेखी तंत्र में भी सूचीबद्ध किया जाना चाहिए। इसे कभी सार्वजनिक नहीं किया जाना चाहिए।

0

हाँ, वहाँ है, और अगर कुछ bizzare, रहस्यमय कारण आप इसे उपयोग करना आवश्यक है के लिए, यह eval है:

चेतावनी: इस का उपयोग न करें जब तक आप एक सच में, सच अच्छा कारण

eval(File.read("name_of_var_file"), binding) 
है

यदि आप वास्तव में करने की कोशिश कर रहे हैं तो एक कॉन्फ़िगरेशन फ़ाइल लिखें, YAML का उपयोग करें। इस तरह एक फ़ाइल:

config.yaml:

foo: "bar" 

इस तरह पहुँचा जा सकता है: मानक अभ्यास का उल्लेख नहीं

require 'yaml' 
conf = YAML.loads(File.read("config.yaml")) 
conf['foo'] #=> 'bar' 

यह, सुरक्षित और प्रबंधनीय है।


फ़ाइल दुर्गम बनाने के लिए के रूप में, कि एक ऑपरेटिंग सिस्टम स्तर समस्या यह है कि पर्यावरण के बारे में जानकारी के बिना हल नहीं किया जा सकता है, ओएस, सेटअप आदि

+0

मुझे जिज्ञासा से बाहर निकलने का उपयोग क्यों नहीं करना चाहिए? –

+0

उपयोगकर्ता द्वारा प्रदान की गई फ़ाइल से eval का उपयोग क्यों नहीं किया जाता है वास्तव में जोखिम के कारण होता है। इंटरनेट पर इस बारे में काफी जानकारी है। और शायद यहां SO पर। या सुरक्षा एक्सचेंज। – vgoff

+0

यह भी प्रश्न के पर्यावरण परिवर्तनीय भाग को संबोधित नहीं करता है। – vgoff

1

एक स्थानीय चर का उद्देश्य है है विधि परिभाषा या ब्लॉक के भीतर अस्थायी रूप से उपयोग किया जाना चाहिए। इस तरह के वातावरण के बाहर इसका उपयोग करना, विशेष रूप से फाइलों के दौरान इसका उद्देश्य हार जाता है। आपको इसे करने की ज़रूरत नहीं है, और रूबी के पास ऐसा करने का कोई आसान तरीका नहीं है।

यदि आप चर का सही उपयोग कर रहे हैं, और फ़ाइलों के बीच चर साझा करना चाहते हैं, तो यह अन्य प्रकार के चर जैसे उदाहरण, कक्षा या वैश्विक चर होना चाहिए। या, वातावरण स्थापित करने के उद्देश्य से, आपको स्थिरांक का उपयोग करना चाहिए। उनमें से, वैश्विक चर और स्थिरांक फ़ाइल में लिखे जा सकते हैं, एक अलग फ़ाइल में लोड किया जा सकता है, और इस्तेमाल किया जा सकता है।

फ़ाइल a.rb

$foo = 1 
FOO = 2 

फ़ाइल b.rb

load "file-a.rb" 
$foo # => 1 
FOO # => 2 

उदाहरण और वर्ग चर का सवाल है, वे एक वर्ग या यह का एक उदाहरण के हैं, इसलिए वे किया जाना चाहिए इस तरह के पर्यावरण में परिभाषित किया गया। और आप एक ही कक्षा को एक अलग फ़ाइल में फिर से खोल सकते हैं, और इसे किसी अन्य फ़ाइल में लोड कर सकते हैं।

फ़ाइल-ए।rb

class Bar 
    @@foo = 1 
    def initialize; @foo = 2 end 
end 

फ़ाइल b.rb

load "file-a.rb" 
Bar.class_variable_get("@@foo") # => 1 
Bar.new.instance_variable_get("@foo") # => 2 
+0

यह समझ में आता है, मैं पासवर्ड और मेरे प्रोग्राम से बाहर रखने की कोशिश कर रहा था और इसलिए मैं उन्हें इस तरह लोड करने की कोशिश कर रहा था। यह सिर्फ एक स्क्रिप्ट है और मैं इसमें कोई कक्षा बनाने की योजना नहीं बना रहा हूं –