2014-04-10 5 views
6

तो मैं उत्पादन में अपने रेल ऐप को तैनात करने की कोशिश कर रहा हूं। जब मैं पेज पर जाता हूं तो मुझे 500 त्रुटि मिलती है। मैं निम्नलिखित त्रुटि मिलती है जब मैं अपने त्रुटि लॉग करने के लिए जाना:रेलवे secret_key_base उत्पादन में पहचाना नहीं जा रहा

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 

मैं रेल 4.1 चला रहा हूँ और मेरे config/secrets.yml इस तरह दिखता है:

development: 
     secret_key_base: <development key>   
    test: 
     secret_key_base: <test key> 

    # Do not keep production secrets in the repository, 
    # instead read values from the environment. 
    production: 
     secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

मैं रेक गुप्त भाग गया पाने के लिए कुंजी और मेरे bash_profile में निर्यात डाल दिया और इसे सोर्स किया। मैं रेक संपत्ति चला गया: सफलतापूर्वक precompile। फिर भी मैं अभी भी यह त्रुटि प्राप्त कर रहा हूं। कोई विचार?

अपडेट: मैंने थोड़ा बेहतर जानकारी देने के लिए प्रदान किए गए त्रुटि संदेश को अपडेट करने का प्रयास किया .... और संदेश अपडेट नहीं हुआ। मैंने फिर पर्यावरण परिवर्तनीय और अभी भी कोई पासा का उपयोग करने की बजाय yml फ़ाइल में कुंजी जोड़ने की कोशिश की। मैं होस्टमस्टर पर चल रहा हूं इसलिए मैं सर्वर को पुनरारंभ नहीं कर सकता ..... लेकिन कुछ मुझे बता रहा है कि क्या करने की आवश्यकता है ...

अद्यतन 2: रात के माध्यम से सोने के बाद ऐसा लगता है कि यह समस्या नहीं है अब एक मुद्दा है। यह कुछ प्रकार के कैशिंग होना चाहिए। अब मेरी समस्या यह है कि यह पुराने डेटाबेस का उपयोग करने की कोशिश कर रहा है जिसे मैंने अपने डेटाबेस के लिए दिन पहले बदल दिया था। अगर मुझे लगता है कि कैश को कैसे हटाया जाए तो मैं इसे यहां पोस्ट करूंगा और इसे एक उत्तर के रूप में चिह्नित करूंगा। अगर कोई और जानता है कि यह कैसे करना है तो कृपया मुझे बताएं और मैं इसे एक उत्तर के रूप में चिह्नित करूंगा। मैं अपनी होस्टिंग के रूप में होस्टमोंस्टर का उपयोग कर रहा हूं और अपने रेल ऐप को होस्ट करने के लिए उनके साइट पर उनके चरणों का पालन कर रहा हूं।

उत्तर

5
  1. आप क्योंकि YourAppName::Application.initialize!config/environment.rb में कहा जाता है के बाद आप अपनी सेटिंग्स को बदल नहीं सकते, तो अपने सर्वर को पुनः आरंभ करने की जरूरत है।
  2. Checkout आपके YML मार्कअप, शायद कुछ त्रुटियां
  3. शायद कुछ अपने config/initializers/secret_token.rb

समस्या में गलत नहीं ENV छद्म हैश के साथ है। अगर एनवी में ऐसी कोई कुंजी नहीं है तो secret_key_base शून्य होगा।

+0

मैं इस ऐप को होस्ट करने के लिए होस्टमस्टर का उपयोग कर रहा हूं (साझा होस्टिंग) .... मैं अपने सर्वर को पुनरारंभ कैसे कर सकता हूं? –

+1

इसके अलावा, 4.1 में कोई कॉन्फ़िगर/प्रारंभकर्ता/secret_token.rb नहीं है। अब केवल एक config/secrets.yml है और मैंने –

+1

से ऊपर पोस्ट की है अपनी तैनाती सेटिंग्स की जांच करें। शायद आपको linked_files में config/secrets.yml निर्दिष्ट करने की आवश्यकता है (जैसे डेटाबेस.आईएमएल यदि आप capistrano का उपयोग कर रहे हैं) –

5

मैं एक ही समस्या थी और मैं एक वातावरण चर बनाने हर बार है कि मैं उत्पादन सर्वर पर लॉगइन लोड करने के लिए हल किया और मेरे सार में अपने स्वयं के द्वारा यह कॉन्फ़िगर करने के लिए कदम की एक मिनी गाइड बनाया:

https://gist.github.com/pablosalgadom/4d75f30517edc6230a67

तो मैं यूनिकॉर्न v4.8.2 के साथ रेल 4.1 उपयोग कर रहा था और जब मैं अपने अनुप्रयोग को तैनात करने की कोशिश की यह ठीक से शुरू नहीं करता है और unicorn.log फ़ाइल में मैं इस त्रुटि संदेश मिला:

"एप्लिकेशन त्रुटि : 'उत्पादन' वातावरण के लिए secret_key_base गुम है, इस मान कोमें सेट करें(रनटाइम एरर) "

थोड़ा सा शोध करने के बाद मुझे पता चला कि रेल 4.1 गुप्त_की का प्रबंधन करने के तरीके को बदलता है, इसलिए अगर हम secrets.yml फ़ाइल को उदाहरण में पढ़ें RailsProject/config/secrets।YML आप कुछ इस तरह मिल जाएगा (आप अपने प्रोजेक्ट के नाम के लिए "exampleRailsProject" की जगह की जरूरत है):

# Do not keep production secrets in the repository, 
# instead read values from the environment. 
production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 

इसका मतलब है कि रेल अपने उत्पादन सर्वर में secret_key_base के लिए एक वातावरण चर का उपयोग करने की सिफारिश की गई है, ताकि इसलिए इस त्रुटि को हल करने के लिए आपको हमारे उत्पादन सर्वर में लिनक्स (मेरे मामले में यह उबंटू) के लिए पर्यावरण चर बनाने के लिए इन चरणों का पालन करना होगा:

1.- हमारे उत्पादन सर्वर के टर्मिनल में आप अगले को निष्पादित करेंगे आदेश:

$ RAILS_ENV=production rake secret 

यह अक्षरों और संख्याओं के साथ एक बड़ी स्ट्रिंग देगा, यही आपको चाहिए, इसलिए कॉपी करें (हम उस कोड को GENERATED_CODE के रूप में देखेंगे)।

2.1 अब अगर हम अपने सर्वर पर रूट उपयोगकर्ता के रूप में प्रवेश हम इस फाइल को खोजने के लिए और इसे खोलने के लिए की आवश्यकता होगी:

तो हम फ़ाइल की तह तक जाना $ vi/etc/प्रोफ़ाइल ("बदलाव + जी "छठी में पूंजी जी के लिए)

और हम अपने GENERATED_CODE (VI में लिखने के लिए" i "कुंजी दबाकर) के साथ हमारे पर्यावरण चर लिखेंगे, फ़ाइल के अंत में एक नई पंक्ति में होना सुनिश्चित करें:

export SECRET_KEY_BASE=GENERATED_CODE 

कोड लिखने के बाद हम परिवर्तनों को सहेजते हैं और बंद टी वह फ़ाइल (हम "ईएससी" कुंजी दबाते हैं और फिर VI में सहेजने और बाहर निकलने के लिए ": x" और "ENTER" कुंजी लिखते हैं)

2.2 लेकिन यदि हम सामान्य उपयोगकर्ता के रूप में लॉगिन करते हैं, तो हम इस gist के लिए example_user को कॉल करने दें, हम यह अन्य फ़ाइलों में से एक खोजने की जरूरत होगी:

$ vi ~/.bash_profile 
$ vi ~/.bash_login 
$ vi ~/.profile 

इन फ़ाइलों को महत्व के क्रम में कर रहे हैं, कि है कि यदि आप पहले फ़ाइल है, तो आप दूसरों में लिखने की जरूरत नहीं होगी मतलब है। तो अगर आपको अपनी निर्देशिका में यह 2 फाइलें मिलीं "~/.bash_profile" और "~ /profile" आपको केवल पहले "~/.bash_profile" में लिखना होगा, क्योंकि लिनक्स केवल यह एक और दूसरा पढ़ेगा अनदेखा कर दिया जाएगा।

तो हम फ़ाइल की तह तक ("Shift + G" राजधानी के लिए जी छठी में)

जाना और हम अपने GENERATED_CODE के साथ हमारे वातावरण चर लिखेंगे (प्रेस "मैं" कुंजी VI में लिखने के लिए) ": एक्स"

export SECRET_KEY_BASE=GENERATED_CODE 

कोड हम परिवर्तनों को सहेजने और फ़ाइल को बंद करें (हम धक्का "ESC" कुंजी और फिर लिखने लिखा करने के बाद:, फ़ाइल के अंत में एक नई लाइन में होना सुनिश्चित हो सकता है और VI में सहेजने और बाहर निकलने के लिए "ENTER" कुंजी)

3.-हम यह सत्यापित कर सकते हैं कि हमारे पर्यावरण चर प्रोपे रेलवे इस आदेश के साथ लिनक्स में सेट करें:

$ printenv | grep SECRET_KEY_BASE 

या साथ:

$ echo $SECRET_KEY_BASE 

जब आप इस आदेश पर अमल, अगर सब कुछ ठीक चला गया, तो यह आपको GENERATED_CODE है कि हम पहले उत्पन्न दिखाएगा। अंत में सभी कॉन्फ़िगरेशन के साथ आप यूनिकॉर्न या अन्य के साथ अपने रेल ऐप की समस्याओं के बिना तैनात कर सकते हैं।

अब जब आप अपना खोल टर्मिनल बंद करते हैं और उत्पादन सर्वर पर फिर से लॉगिन करते हैं तो आपके पास यह पर्यावरण परिवर्तनीय सेट होगा और इसका उपयोग करने के लिए तैयार होगा।

और यह बात करता है !! मुझे उम्मीद है कि यह मिनी गाइड आपको इस त्रुटि को हल करने में मदद करेगा।

संबंधित मुद्दे