2012-04-09 15 views
24

मैं एक प्रणाली Heroku जहाँ मैं पर्यावरण चर में गुप्त कुंजी की दुकान और फिर मेरी रेल से उन तक पहुंच जाएगा के लिए इसी तरह स्थापित करने के लिए कोशिश कर रहा था पर nginx और यात्री का उपयोग कर वातावरण चर कहाँ डाल करने के लिए इस तरह एप्लिकेशन:जब उबंटू

secret = ENV['EMAIL_PASSWORD'] 

मुझे पता है कि उसेोकू आपको heroku config:add EMAIL_PASSWORD=secret करने देता है, और मैं ऐसा कुछ ऐसा करना चाहता था जो मेरे अपने उबंटू बॉक्स के लिए nginx और यात्री चला रहा हो।

क्या मुझे इन चरों को export एस .bashrc या .bash_login में जोड़ना चाहिए ताकि सिस्टम को रीबूट करने पर इन चर स्वचालित रूप से सेट हो जाएं?

मुझे यकीन है कि जब उन फ़ाइलों में से प्रत्येक में पढ़ा जाता है नहीं कर रहा हूँ।

उत्तर

-1

आप अपने घर फ़ोल्डर के अंतर्गत अपने .profile फ़ाइल में निर्यात लाइनों को जोड़ने के लिए है ...

पर्यावरण चर सेट किया जा रहा है लॉगिन पर ...

+0

एक लॉगिन एक रिबूट जब के बाद होता है:

ls -lah 'whereis rvm'/environments/default 

कि फ़ाइल में पहली पंक्ति से पहले इन दो पंक्तियों जोड़ें: प्रोफ़ाइल फ़ाइलें

file: $rvm_path/environments/default 

पथ चलाने इस आदेश को खोजने के लिए nginx एक आरसीडीडी स्क्रिप्ट द्वारा शुरू किया गया है? –

7

ध्यान रखें कि nginx आपके जैसा ही वातावरण में नहीं चल रहा है, और आमतौर पर (उच्चारण "अपाचे") हम सर्वर कॉन्फ़िगरेशन फ़ाइल में SetEnv के माध्यम से env-vars जोड़ते हैं। हालांकि, nginx में ऐसी सुविधा नहीं है ... और न ही मुझे इसकी आवश्यकता है, मुझे विश्वास है।

sudo -E /usr/local/sbin/nginx 

अपने स्वयं के उपयोगकर्ता env vars के बारे में जागरूक होने के लिए nginx चलाते समय।

या, env आदेश (see here) की जाँच:

env EMAIL_PASSWORD=secret 

आपके प्रश्न का उत्तर करने के लिए, हाँ, आप अपने खोल config फाइल में export बयानों का उपयोग करना चाहिए।

1

संपादित:

ठीक है खेद है कि मैं यह बहुत तेजी से है, तो आप देख सकते हैं कि यहाँ ENV चर को बचाने के लिए पढ़ें:

https://help.ubuntu.com/community/EnvironmentVariables

http://www.cyberciti.biz/faq/set-environment-variable-linux/

आप पर सर्वर के रूप में Nginx का उपयोग करते हैं आपका स्थानीय कंप्यूटर, आप अपने एनवी वैरिएबल को अपनी nginx कॉन्फ़िगरेशन फ़ाइल में परिभाषित कर सकते हैं।

location/{ 
... 
    fastcgi_param EMAIL_PASSWORD secret; #EMAIL_PASSWORD = secret 
... 
} 
+0

सहायक नहीं है, प्रश्न को और पढ़ें अच्छी तरह से – oma

0

मामले किसी में मैंने किया था के रूप में प्रश्न के एक ही प्रकार की थी, यहाँ विभिन्न .bash* फ़ाइलों के बारे में एक अच्छी छोटी writeup है: http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html

सारांश में:

अधिकांश भाग के लिए: .bash_profile जब आप कंप्यूटर में लॉग इन करते हैं तो पढ़ा जाता है और .bashrc पढ़ा जाता है जब आप एक नया टर्मिनल प्रारंभ करते हैं। मैक ओएसएक्स .bash_profile के लिए आपके द्वारा शुरू की जाने वाली प्रत्येक टर्मिनल विंडो के साथ पढ़ा जाता है।

तो, अनुशंसित प्रक्रिया से .bash_profile से स्रोत है ताकि कंप्यूटर पर लॉगिन करते समय सभी चर सेट हो जाएं।ध्यान में रखने की

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi 
5

(यह शायद overkill है, लेकिन शायद यह उपयोगी हो जाएगा)

कुछ बातें:: बस .bash_profile में जोड़ना

पर्यावरण चर कुछ हद तक सार्वजनिक कर रहे हैं, और कर सकते हैं अन्य प्रक्रियाओं द्वारा आसानी से देखा जा सकता है जैसे कि ps(1) कमांड (जैसे ps e $$ बैश में) या /proc/*/environ पर एक विकल्प जोड़ा गया है, हालांकि दोनों आधुनिक सिस्टम पर कम से कम उसी उपयोगकर्ता (या रूट) तक सीमित हैं। यदि आपके पास एक और काफी आसान विकल्प उपलब्ध है तो उन पर भरोसा न करें।

~/.bashrc वातावरण चर के लिए गलत जगह है, क्योंकि वे ~/.bash_login में लॉग इन पर एक बार गणना की जा सकती .bash_profile ~/.profile, अपने उपयोग के आधार पर है, ~ /, या, और सभी वंशज गोले करने के लिए नीचे पारित कर दिया। इसके विपरीत, ~/.bashrc क्रियाओं को प्रत्येक खोल आमंत्रण पर पुन: संकलित किया जाता है (जब तक कि स्पष्ट रूप से अक्षम नहीं किया जाता)।

~/.profile में बैश कोड रखना अन्य श-वंशज गोले और गैर खोल उपकरण जो कि फ़ाइल पढ़ने की कोशिश भ्रमित कर सकते हैं, तो होने बैश विशेष ~/.bash_login या -_profile बैश-विशिष्ट बातें शामिल है, और के लिए . ~/.profile का उपयोग कर अधिक सामान्य चीजें (कम, संपादक, दृश्य, LC_COLLATE, LS_COLORS, आदि), अन्य उपकरणों के लिए मित्रवत है।

~/.profile में पर्यावरण चर पुराने बोर्न शेल फॉर्म (VAR=value ; export VAR) में होना चाहिए। लिनक्स पर यह आमतौर पर महत्वपूर्ण नहीं होता है, हालांकि अन्य यूनिक्सन पर यह एक बड़ा मुद्दा हो सकता है जब "sh" का पुराना संस्करण उन्हें पढ़ने की कोशिश करता है।

कुछ एक्स सत्र केवल ~/.profile पढ़ेंगे, ~/.bash_login या ऊपर वर्णित अन्य लोग नहीं। कुछ ~/.xsession फ़ाइल को . $HOME/.profile के लिए संशोधित करने की आवश्यकता होगी यदि यह पहले से ही किसी भी तरह से नहीं है।

सिस्टम-व्यापी सेटिंग्स को /etc/profile.d/similar-to-heroku.sh जैसे कुछ में रखा जाएगा। ध्यान दें कि ".sh" केवल तब मौजूद है जब फ़ाइल का उपयोग "।" के साथ किया जाएगा। या "स्रोत" - खोल स्क्रिप्ट कभी में यूनिक्स/लिनक्स के किसी भी रूप में कमांड-नाम एक्सटेंशन होना चाहिए।

अधिकांश पर्यावरण चर को हटा दिया जाता है जब एक sudo एस रूट करने के लिए, यबाकोस बताते हैं। इसी तरह के मुद्दे crontabs, नौकरियों, आदि में दिखाई देते हैं। संदेह में, env | sort > /tmp/envvars जोड़ना या एक संदिग्ध स्क्रिप्ट की तरह वास्तव में डिबगिंग में मदद कर सकते हैं।

पता लगाएं कि कुछ वितरणों में शैल स्टार्टअप स्क्रिप्ट हैं इसलिए वे वास्तव में बाश (1) मैनुअल पेज में दिए गए क्रम को अस्वीकार कर देते हैं। जब भी आपको एक डिफ़ॉल्ट उपयोगकर्ता ~/.profile $ BASH या $ BASH_VERSION की जांच हो रही है, तो आप इनमें से किसी एक में हो सकते हैं, उम ..., "रोचक" वातावरण, और उन्हें यह पता लगाने के लिए पढ़ना पड़ सकता है कि नियंत्रण प्रवाह कहां जाता है (वे एक बैश-विशिष्ट ~/.bash_profile या ~/.bash_login का उपयोग करना चाहिए, जिसमें संदर्भ द्वारा अधिक सामान्य ~/.profile शामिल है, इस प्रकार बैश निष्पादन योग्य को खोल कोड में $ BASH चेक लिखने के बजाय काम करने दें)।

~/.bash_profile (या ~/.bash_login) निश्चित रूप से . ~/.bashrc शामिल कर सकते हैं, लेकिन वातावरण चर ~/.bash_profile में हैं (यदि पार्टी विशेष) या ~/.profile (इसे से शामिल तुम वहाँ में सब कुछ के लिए इस तंत्र का उपयोग करते हुए और हो रहे हैं envvars) जैसा कि डेविट कहते हैं, बस . ~/.bashrc डालने के बाद याद रखें।bash_profile का . ~/.profile और अन्य पर्यावरण चर, ताकि ~/.bashrc दोनों लॉगिन और अन्य सभी आमंत्रण पहले से सेट किए जा रहे envvars पर भरोसा कर सकें। एक उदाहरण ~/.bash_profile:

# .bash_profile 
[ -r ~/.profile ] && . ~/.profile # envvars 
[ -r ~/.bashrc ] && . ~/.bashrc # functions, per-tty settings, etc. 
#---eof 

किसी भी बॉर्न शैल वंशज में [ -r ... ] && ... काम करता है और त्रुटियों नहीं कारण नहीं है/अगर .profile याद आ रही है रोकता (मैं व्यक्तिगत रूप से, साथ ही एक ~/.profile.d/*.sh सेटअप है, लेकिन यह एक पूरी तरह से के रूप में छोड़ दिया जाता है वैकल्पिक व्यायाम)।

नोट बैश कि केवल जो यह पाता है इन तीन के पहले फ़ाइल में लिखा है:

~/.bash_profile 
~/.bash_login 
~/.profile 

... इसलिए एक बार आप है कि एक, अन्य दो के उपयोग के लिए पूरी तरह से उपयोगकर्ता के नियंत्रण में है, बैश के परिप्रेक्ष्य से।

4

This is documented in nginx। श्रमिकों को चलाने परTZ को छोड़कर यह सभी पर्यावरण चर हटा देता है। आप एक वातावरण चर जोड़ना चाहते हैं, nginx विन्यास की शीर्ष को निम्नलिखित जोड़ें:

# The top of the configuration usually has things like: 
user user-name; 
pid pid-file-name; 

# Add to this: 
env VAR1=value1; 
env VAR2=value2; 

# OR simply add: 
env VAR1; 
# To inherit the VAR1 from whatever you set in bash 

सामान्य export या कुछ भी आप बैश में क्या nginx को पारित हो रही के कारण, की कोई गारंटी नहीं है जिस तरह से init स्क्रिप्ट लिखी जाती हैं (हम नहीं जानते कि वे एक स्वच्छ वातावरण के साथ सुडो का उपयोग कर रहे हैं, आदि)। इसलिए मैं इसे करने के लिए खोल के आधार पर इन्हें nginx कॉन्फ़िगरेशन फ़ाइल में ही डाल दूंगा।

संपादित करें: फिक्स लिंक

+0

क्या आप इस बारे में सकारात्मक हैं? क्या आप इसे स्वयं करते हैं? – oma

+0

.bashrc या .bash_login में संग्रहीत करने से काफी बेहतर है। '.bashrc' /' .bash_login' उपयोगकर्ता-विशिष्ट हैं और कुछ परिस्थितियों में कॉल करने की गारंटी नहीं है (कहें कि जब आप सूडो का उपयोग करते हैं, या अपस्टार्ट स्क्रिप्ट से इत्यादि) – Subhas

+0

एनजीएक्स में एनवीवी एनईवी से रेल तक उपलब्ध है, दाएं ? क्या यह एक मान्य उत्तर है या नहीं (जिसका अर्थ है कि आप इसे कर रहे हैं)? – oma

2

आप एक और सवाल करने के लिए इस प्रतिक्रिया पढ़ना चाहिए, यह मदद मिलेगी:

https://stackoverflow.com/a/11765775/1217298

+0

धन्यवाद, यह एक अच्छा तरीका था, इस धागे को नहीं मिला। – oma

10

आप dotenv gem जो पर्यावरण चर के रूप में .env फाइल लोड कर सकते हैं। आप विभिन्न वातावरण के लिए .env फ़ाइल जेनरेट कर सकते हैं, और इसके बजाय अपने भंडार में जांच नहीं की जानी चाहिए।

+0

मैं किसी अन्य प्रोजेक्ट के लिए डॉटनव का उपयोग कर रहा हूं, यह सामान्य रूप से परीक्षण और विकास के लिए उपयोग किया जाता है। मान लीजिए कि मैं इसे उत्पादन के लिए उपयोग कर सकता हूं, मुझे सभी env vars सूचीबद्ध .env पसंद है, यह साफ है। क्या तुम यह कर रहे हो – oma

+0

नहीं। मैंने इसका उपयोग नहीं किया है। मैंने हेरोोकू कॉन्फ़िगर सेटिंग्स का उपयोग किया है और यह वास्तव में मेरे लिए साफ दिखता है। इस ब्लॉग को निम्नलिखित ब्लॉग पोस्ट से मिला: http://daniel.fone.net.nz/blog/2013/05/20/a-better-way-to-manage-the-rails-secret-token/ – leenasn

4

मेरे पास /usr/local/bin फ़ोल्डर में एक स्क्रिप्ट है जो कुछ env vars सेट करती है और फिर रूबी निष्पादित करती है। मैं /usr/local/bin में उस फ़ाइल में मेरी फ़ाइल (अपाचे, Nginx नहीं) में रूबी के पथ को परिभाषित करता हूं।

उदाहरण:

#!/bin/sh 

# setup env vars here 
export FOO=bar 
export PATH_TO_FOO=/bar/bin 
export PATH=$PATH:PATH_TO_FOO 

# and execute Ruby with any arguments passed to this script 
exec "/usr/bin/ruby" "[email protected]" 
1

मैं एक संस्करण प्रबंधक के रूप में rbenv उपयोग कर रहा हूँ। प्रोजेक्ट के लिए पर्यावरण चर स्टोर करने का अच्छा समाधान rbenv-vars प्लगइन स्थापित कर रहा था और उन्हें .rbenv-vars फ़ाइल में डाल रहा था। ,
Deploying app ENV variables with Rbenv, Passenger and Capistrano

2

मैं उन्हें अपने nginx config में डाल विशेष रूप से passenger_env_var आदेश का उपयोग अनुप्रयोग के लिए सर्वर परिभाषा:

यहाँ एक उपयोगी पोस्ट है

 
server { 
    server_name www.foo.com; 
    root /webapps/foo/public; 
    passenger_enabled on; 

    passenger_env_var DATABASE_USERNAME foo_db; 
    passenger_env_var DATABASE_PASSWORD secret; 
    passenger_env_var SECRET_KEY_BASE the_secret_keybase; 
} 

यह मेरे लिए काम करता है। अधिक जानकारी के लिए फ़्यूज़न यात्री docs देखें।

+0

Didn मेरे लिए कुछ भी नहीं कर रहा है, फिर भी यह दिखा रहा है कि मैं mysql2 के लिए पासवर्ड का उपयोग नहीं कर रहा हूं, अगर मैं अपने पासवर्ड के साथ <% = ENV ["MYSQL_P"]%> को प्रतिस्थापित करता हूं तो ऐप ठीक काम करता है। –

+0

आप nginx का किस संस्करण का उपयोग कर रहे हैं? 'passenger_env_var' संस्करण 5.0.0 में जोड़ा गया था। पहले संस्करण इसका समर्थन नहीं करेंगे। – joshaidan

+0

रूट @ सर्वर: ~ # यात्री-कॉन्फ़िगरेशन - संस्करण फ़्यूज़न यात्री 5.0.30 –

1

आरएमवी का उपयोग कर रहे लोगों से लड़ने वालों के लिए। सुनिश्चित करें कि आपकी डिफ़ॉल्ट वातावरण फ़ाइल में आपके उपयोगकर्ता के .bashrc और शामिल हैं।

source $HOME/.bashrc 
source $HOME/.profile 
+1

जिसने तुमने मेरा जीवन बचाया –