2015-02-27 3 views
9

रेल 4.2 में उत्पादन के लिए गुप्त_key_base और secret_token दोनों आवश्यक हैं? स्थापना न निम्न अपवाद संदेश का कारण बनता है:क्या रेल 4.2 गुप्त_टोकन का उपयोग करता है?

लापता secret_token और 'उत्पादन' पर्यावरण के लिए secret_key_base, config/secrets.yml

में इन मूल्यों को निर्धारित 4.2 अपग्रेड मार्गदर्शिका (http://railsapps.github.io/updating-rails.html) इस कहते हैं:

जब आप रेल नई कमांड का उपयोग करते हुए एक नया रेल एप्लिकेशन बनाते हैं, तो अद्वितीय गुप्त कुंजी उत्पन्न होती है औरपर लिखी जाती हैकॉन्फ़िगर/प्रारंभकर्ता/secret_token.rb फ़ाइल।

लेकिन ऐसी कोई फाइल नहीं बनाया गया था जब मैं अपने एप्लिकेशन उत्पन्न, और वहाँ config में secret_token के लिए कोई संदर्भ है/secrets.yml

मैं यह सोचते हैं रहा हूँ त्रुटि संदेश गलत है, और केवल secret_key_base कि जरूरत है। जब मैं अपने ऐप मशीन पर उत्पादन में अपना ऐप चलाता हूं, तो यह सिर्फ secret_key_base से शुरू होता है, लेकिन इंजनयार्ड में, secret_key_base (एक पर्यावरण चर के माध्यम से) सेट करना काम नहीं कर रहा है। मुझे अभी भी त्रुटि मिलती है।

उत्तर

4

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

आपको जो वास्तविक त्रुटि मिल रही है, उसके लिए मैंने अभी एक ब्रांड नई रेल 4.2 ऐप ("रेल नई फू") का परीक्षण किया है, यह देखने के लिए कि क्या यह secret_token.rb उत्पन्न कर रहा है, जो यह नहीं है। मुझे लगता है कि तुम यहाँ की जरूरत config/secrets.yml बनाने के लिए है, और उस फ़ाइल को इस तरह दिखना चाहिए:

development: 
    secret_key_base: somekey 

test: 
    secret_key_base: someotherkey 

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

अब, जब आप ENV [ "SECRET_KEY_BASE"] देखते हैं, कि जहां इंजन यार्ड का एक सा है है एक मोड़ - हम अभी तक बॉक्स से बाहर नहीं प्रदान करते हैं।जब तक आपका रेपो निजी होता है, तब तक आप अपने आप में कुछ हार्ड कोड कर सकते हैं। अन्यथा, कस्टम शेफ का उपयोग करके आप एक गुप्त कुंजी आधार बनाकर और अपने ऐप कार्यकर्ता प्रक्रियाओं को लॉन्च करने के लिए जिम्मेदार रैपर स्क्रिप्ट में डाल सकते हैं (उदाहरण के लिए हमारे प्लेटफ़ॉर्म पर कॉन्फ़िगर/env.custom)।

उम्मीद है कि इससे मदद मिलती है।

+1

इसके अलावा, यह secret_token बनाम secret_key_base के बारे में आपके कुछ प्रश्नों का उत्तर दे सकता है: http://guides.rubyonrails.org/upgrading_ruby_on_rails.html#action-pack –

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। जब मैंने ऐप जेनरेट किया था, तो मुझे एक secret_token.rb फ़ाइल नहीं मिली, या तो (इसलिए मुझे लगता है कि यह अब उपयोग नहीं किया गया है), और मेरी ऑटो-जेनरेटेड secrets.yml फ़ाइल आपके द्वारा यहां पोस्ट की गई दिखती है। बॉक्स के बाहर ENV ["SECRET_KEY_BASE"] का समर्थन नहीं करने के लिए, क्या मैं इसे फ़ाइल में डालने के बजाय dotenv मणि का उपयोग कर सकता हूं? –

+0

डॉटनव मणि हमारे प्लेटफॉर्म पर काम नहीं करेगा क्योंकि हमारे पास अपनी खुद की रैपर स्क्रिप्ट है जिसका उपयोग हम एप्लिकेशन सर्वर (उदा। यूनिकॉर्न) के निष्पादन से पहले पर्यावरण चर सेट करने के लिए करते हैं। इसलिए जब यह आपकी स्थानीय मशीन पर उत्पादन में काम करेगा, उत्पादन में, आपको/डेटा/ /shared/config/env.custom को संशोधित करने की आवश्यकता है, जो एक फ़ाइल है जिसे कस्टम शेफ द्वारा संशोधित किया जाना चाहिए क्योंकि सभी फाइलों का इलाज किया जाना चाहिए क्योंकि डिस्पोजेबल और कॉन्फ़िगरेशन प्रबंधन को सर्वोत्तम/आवश्यक अभ्यास माना जाता है। –

0

मैं सुझाव देता हूं कि रेल के नवीनतम संस्करण के साथ एक नया ऐप पुन: उत्पन्न करना होगा।

इस फ़ाइल में मेरा आखिरी परियोजना में स्वत: जनरेट किया गया था:

# config/secrets.yml 
# Be sure to restart your server when you modify this file. 

# Your secret key is used for verifying the integrity of signed cookies. 
# If you change this key, all old signed cookies will become invalid! 

# Make sure the secret is at least 30 characters and all random, 
# no regular words or you'll be exposed to dictionary attacks. 
# You can use `rake secret` to generate a secure secret key. 

# Make sure the secrets in this file are kept private 
# if you're sharing your code publicly. 

development: 
    secret_key_base: fooooo 

test: 
    secret_key_base: fooooo 

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

मैं भी सलाह देते हैं कि आप railsdiff साइट (उदाहरण: http://railsdiff.org/4.1.10.rc2/4.2.1.rc2) के माध्यम से उत्पन्न फ़ाइलों की तुलना के रूप में यह लग रहा है जैसे आप अपग्रेड कर रहे हैं पुराने संस्करण से।

+1

मैं रेल 4.2.0 का उपयोग कर रहा है, और मैं एक ही स्वत: जनरेट secrets.yml फ़ाइल आपके पास दिखा रहा है लेकिन मेरे प्रश्न के अनुसार, secret_token कहां खेलता है? त्रुटि संदेश दोनों को सेट करने के लिए कहता है, जो मैं मान रहा हूं वह गलत है। अपग्रेड गाइड का कहना है कि जेनरेट में एक config/secret_token.rb फ़ाइल - क्या आपके ऐप में एक है? –

+1

आप एक अनौपचारिक स्रोत का जिक्र कर रहे हैं - कि रेलवे साइट पुरानी है, इसलिए आप जो समस्या देख रहे हैं। ऐप जनरेटर के अनुसार बनाई गई 'secret_token.rb' फ़ाइल नहीं है (डिफ़ॉल्ट रूप से यह है)। इंजन यार्ड विशिष्ट जानकारी के लिए ऑस्टिन हूगी द्वारा उत्तर देखें। धन्यवाद! –

+1

ठीक है, धन्यवाद, माइकल। लेकिन एफवाईआई - रेल 4.2 द्वारा उत्पन्न वास्तविक त्रुटि संदेश यह भी कहता है कि दोनों को सेट करने की आवश्यकता है (मेरे मूल प्रश्न में उद्धृत), इसलिए यह थोड़ा उलझन में है। –

2

4.2 गुप्त कुंजी का उपयोग करता है और आपके द्वारा पोस्ट किए गए लिंक में वह समाधान है जिसे आप ढूंढ रहे हैं।

ऐसे वातावरण में जो सक्रिय कुंजी के साथ सक्रिय नहीं होता है, आपको इसे rake secret का उपयोग करके उत्पन्न करना होगा, फिर आउटपुट को कंसोल से अपने config/initializers/secret_token.rb फ़ाइल में रखें (यदि कोई नहीं है तो आप इसे बना सकते हैं)।

आपके पास secrets.yml का उपयोग करने से बचने का विकल्प है। कई लोग गुप्त जानकारी को संभालने के लिए एक और मणि/प्रक्रिया (उदा। figaro) का उपयोग करना पसंद करते हैं। अपने जीवन को सरल बनाने के लिए आप इस जानकारी को secret_token.rb फ़ाइल में डाल सकते हैं और आगे बढ़ सकते हैं - या आप स्थिति को संभालने के कई अन्य बेवकूफ तरीकों को सीख सकते हैं।

+1

लेकिन रेल त्रुटि संदेश क्यों कहता है कि secret_key_base और secret_token दोनों को सेट करने की आवश्यकता है? क्या यह सिर्फ एक त्रुटि है? और मैं फ़ाइल में कुंजी डालने के बजाय secrets.yml में secret_key_base सेट करने के लिए एक पर्यावरण चर का उपयोग कर रहा हूं। इस तरह मुझे इसे गिटिग्नोर करने की ज़रूरत नहीं है, और मुझे इसे प्रत्येक तैनाती पर मैन्युअल रूप से फिर से बनाने की आवश्यकता नहीं है। –

+0

@JPlato मुझे लगता है कि त्रुटि सिर्फ secret_key_base और secret_token को अलग से संदर्भित कर रही है, लेकिन परंपरागत रूप से आप secret_token.rb फ़ाइल में secret_key_base को बस सेट करेंगे। ईमानदारी से मैं त्रुटि के विनिर्देशों के बारे में भी निश्चित नहीं हूं, मुझे पता है कि मेरे पास इस secret_key_base का उपयोग करके 4.2 एप अप है और मेरी तैनाती प्रक्रिया के दौरान इसकी कॉन्फ़िगरेशन को मुश्किल से देखा गया है। तो समाधान सरल होना चाहिए और ऐसा लगता है कि त्रुटि संदेश सिर्फ चीजों को होने की तुलना में अधिक भ्रमित लग रहा है। मैंने अपने उत्तर को और स्पष्ट होने के लिए भी अपडेट किया। – Ecnalyr

+1

धन्यवाद, @Ecnalyr। मुझे लगता है कि आप सही हैं। मुझे लगता है कि मेरी समस्या है, प्रति जे ऑस्टिन ह्यूगली के जवाब, इंजन के एनएवी के माध्यम से इसे स्थापित करने में असमर्थता है। –

2

कम से कम रेल 4.2.2 मुझे एक ही त्रुटि दिया, लेकिन rails उपयोगकर्ता के .bash_profile फ़ाइल में वातावरण चर SECRET_KEY_BASE की स्थापना मेरे लिए समस्या हल हो, तो थोड़ा के बारे में secret_token फर्जी प्रतीत हो रहा है - पूर्व संस्करणों से एक पकड़ मिली , शायद।

rake secret कमांडिंग द्वारा गुप्त तैयार करें, फिर इस तरह फ़ाइल .bash_profile में उत्पन्न स्ट्रिंग का उपयोग करें:

export SECRET_KEY_BASE='the_output_of_the_rake_secret_command' 
संबंधित मुद्दे