"प्रोडक्शन 'के माहौल के लिए" मिसिंग सीक्रेट_की_बेस "को कैसे हल किया जाए (रेल 4.1)


169

मैंने रेल्स एप्लिकेशन बनाया, जिसमें रेलिंग 4.1 का उपयोग किया गया था, खरोंच से और मुझे एक अजीब समस्या का सामना करना पड़ रहा है जिसे मैं हल नहीं कर पा रहा हूं।

हर बार जब मैं हर्कोक पर अपने आवेदन को तैनात करने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है 500:

Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`

secret.ymlफ़ाइल निम्न विन्यास शामिल हैं:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

हरोकू पर मैंने कमांड SECRET_KEY_BASEके परिणाम के साथ " " पर्यावरण चर को कॉन्फ़िगर किया rake secret। यदि मैं लॉन्च करता हूं heroku config, तो मैं चर को सही नाम और मूल्य के साथ देख सकता हूं।

मुझे अभी भी यह त्रुटि क्यों हो रही है?


1
मुझे ठीक वैसी ही समस्या हो रही है और यह जानना अच्छा लगेगा कि ऐसा क्यों हो रहा है। अगर मुझे पता है कि क्यों, मैं अपने समाधान के साथ वापस पोस्ट करूंगा।
danielricecodes

क्या आपकी कॉन्फ़िग फ़ाइल को कॉल किया जाता है secret.ymlया secrets.yml?
जेम्स

2
मैंने फिर से .gitignore फ़ाइल को रेल के द्वारा जनरेट किया है और अब सब कुछ ठीक है
पाओलो लॉरेंटी

जब हमारे पास रेल 4 में अपग्रेड हुआ था, तब भी हमारे पास यह मुद्दा था। हमारे मामले में, यह इसलिए था क्योंकि हमारे पास एक कस्टम वातावरण का नाम था, और जो secret.yml में परिलक्षित नहीं था। मुझे सिर्फ गैर-मानक नाम के साथ फाइल में एक पंक्ति जोड़ना था, कमिट करना और फिर से तैनात करना।
१५:

भविष्य के पाठकों के लिए: यह उत्तर शायद सबसे आसान और सटीक है: stackoverflow.com/a/26541742/4880924
BKSpurgeon

जवाबों:


208

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

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

app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)

कुछ शोध के बाद मुझे पता चला कि रेल 4.1 ने प्रबंधन के तरीके को बदल दिया है secret_key, इसलिए यदि आप उस secrets.ymlपर स्थित फ़ाइल को पढ़ते हैं तो आपको exampleRailsProject/config/secrets.ymlकुछ ऐसा मिलेगा:

# 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अपने उत्पादन सर्वर के लिए एक पर्यावरण चर का उपयोग करने की सलाह देती है। इस त्रुटि को हल करने के लिए आपको अपने उत्पादन सर्वर में लिनक्स (मेरे मामले में Ubuntu) के लिए एक पर्यावरण चर बनाने के लिए इन चरणों का पालन करना चाहिए:

  1. अपने उत्पादन सर्वर के टर्मिनल में निष्पादित करें:

    $ RAILS_ENV=production rake secret

    यह अक्षरों और संख्याओं के साथ एक बड़ी स्ट्रिंग देता है। उसे कॉपी करें, जिसे हम उस कोड के रूप में संदर्भित करेंगे GENERATED_CODE

  2. अपने सर्वर पर लॉगिन करें

    • यदि आप रूट उपयोगकर्ता के रूप में लॉगिन करते हैं, तो इस फ़ाइल को ढूंढें और इसे संपादित करें:

      $ vi /etc/profile

      Vi में Shift+ G(राजधानी "G") का उपयोग करके फ़ाइल के निचले भाग पर जाएं ।

      Vi में सम्मिलित करने के लिए GENERATED_CODE, अपने पर्यावरण चर को लिखें i। फ़ाइल के अंत में एक नई लाइन में होना सुनिश्चित करें:

      $ export SECRET_KEY_BASE=GENERATED_CODE

      परिवर्तनों को सहेजें और फ़ाइल का उपयोग कर बंद करें Escऔर फिर " :x" और Entervi में सहेजें और बाहर निकलने के लिए।

    • लेकिन अगर आप सामान्य उपयोगकर्ता के रूप में लॉग इन करते हैं, तो आइए इसे " example_user" इस जिस्ट के लिए कॉल करें , आपको इन अन्य फ़ाइलों में से एक को खोजना होगा:

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

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

      फिर हम Shift+ का उपयोग करके फ़ाइल के निचले भाग में जाते हैं Gऔर फिर से हमारे GENERATED_CODEउपयोग के साथ पर्यावरण चर लिखते हैं i, और सुनिश्चित करें कि फ़ाइल के अंत में एक नई पंक्ति जोड़ें:

      $ export SECRET_KEY_BASE=GENERATED_CODE

      कोड लिखने के बाद, परिवर्तनों को सहेजें और Escफिर से और " :x" का उपयोग करके और Enterसहेजने और बाहर निकलने के लिए फ़ाइल को बंद करें ।

  3. आप सत्यापित कर सकते हैं कि इस कमांड के साथ लिनक्स में हमारा पर्यावरण चर ठीक से सेट है:

    $ printenv | grep SECRET_KEY_BASE

    या साथ:

    $ echo $SECRET_KEY_BASE

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

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

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

अस्वीकरण: मैं लिनक्स या रेल गुरु नहीं हूं, इसलिए यदि आपको कुछ गलत लगता है या कोई त्रुटि है तो मुझे इसे ठीक करने में खुशी होगी।


11
ऐसा लगता है, कि रेल पर्यावरण चर SECRET_KEY_BASE नहीं देखती है। Printenv इसे दिखाता है, रेल उत्पादन c को भी प्रदर्शित करता है, अगर मैं ENV का निरीक्षण करता हूं। लेकिन, मेरे पास कोई प्रभाव नहीं है, जब मैं यूनिकॉर्न को पुनः आरंभ कर रहा हूं। एकमात्र तरीका, जो अब काम करता है, इसे सीधे
रहस्यों

1
इसने मेरे लिए काम किया। आपके पूर्ण स्पष्टीकरण के लिए धन्यवाद। मैंने अभी-अभी सीखा कि ऐप के पर्यावरण चरों के प्रबंधन के लिए रत्न मौजूद हैं। 'दोतेनव' एक है और 'फोरमैन' उसके लिए है। जबकि इस तरह से मैन्युअल रूप से त्रुटि को ठीक करना शिक्षा था, शायद उन रत्नों में से एक का उपयोग करना प्रक्रिया को सुव्यवस्थित करेगा?
निक रेस

मुझे खुशी है कि मेरा उत्तर उपयोगी था, मणि विकल्प @ निंजा08 के लिए धन्यवाद, वे निश्चित रूप से प्रक्रिया को आसान बनाते हैं, मुख्य रूप से उन लोगों के लिए जो सर्वर का प्रबंधन करने के लिए कैपिस्ट्रानो या अन्य वृद्धिशील उपकरण का उपयोग करते हैं :)
डेमी मैगस

डेमी मैगस के उत्कृष्ट निर्देशों के बाद, मैंने कुछ इस तरह किया: सीडी / var / www / रेल; rvm ext-rbx-2.5.2@rails का उपयोग करें; SKB_FILE = / var / www / .secret_key_base; इको "निर्यात SECRET_KEY_BASE = $ (RAILS_ENV = उत्पादन रेक गुप्त)"> $ SKB- शावक; । $ SKB_FILE; इको "। $ SKB_FILE" | tee -a ~ / .bashrc ~ / .bash_profile; chmod o-rwx $ SKB_FILE;
डेविड विनीकी

अच्छा उत्तर!! मुझे नहीं पता कि यह मेरे लिए क्यों हल नहीं हुआ है, मैं सवाल stackoverflow.com/questions/33117318/…
Adriano Resende

84

मैं मान रहा हूँ कि आपके पास secrets.ymlस्रोत नियंत्रण (यानी यह .gitignoreफ़ाइल में है) में आपकी जाँच नहीं है । यहां तक ​​कि अगर यह आपकी स्थिति नहीं है, तो यह वही है जो इस सवाल को देखने वाले कई अन्य लोगों ने किया है क्योंकि उनके पास जीथब पर उनका कोड उजागर है और वे नहीं चाहते कि उनकी गुप्त कुंजी चारों ओर तैर रही हो।

यदि यह स्रोत नियंत्रण में नहीं है, तो हर्को को इसके बारे में पता नहीं है। तो रेल की तलाश है Rails.application.secrets.secret_key_baseऔर इसे सेट नहीं किया गया है क्योंकि रेल इसे secrets.ymlफाइल की जाँच करके सेट करता है जो मौजूद नहीं है। साधारण वर्कअराउंड आपकी config/environments/production.rbफ़ाइल में जाना और निम्न पंक्ति जोड़ना है:

Rails.application.configure do
    ...
    config.secret_key_base = ENV["SECRET_KEY_BASE"]
    ...
end

यह आपके एप्लिकेशन को पर्यावरण चर का उपयोग करके गुप्त कुंजी को सेट करने के लिए कहता है, इसके बजाय इसे देखने के लिए secrets.yml। यह मुझे इस मोर्चे को जानने के लिए बहुत समय बचा होगा।


15
यह सबसे अच्छा जवाब है। Figaroऔर heroku_secretsकुछ भी नहीं है, जब तक रेल जानता है कि है SECRET_KEY_BASEमें जीवन ENV। मैं इस सोच के साथ संघर्ष कर रहा हूं कि अगर हर्क्यू का अस्तित्व हेरोकू पर होता है, तो रेल इसे केवल मौजूदा गुण के आधार पर उठाती है, लेकिन अब यह स्पष्ट रूप से स्पष्ट लगता है कि रेल को यह देखना होगा कि कहां देखना है। मैं सोच रहा था कि गुप्त कुंजी आधार चीज़ के बारे में चिंता किए बिना मैं जीथब पर कोड कैसे कर सकता हूं; अब मुझे पता है।
21

1
सहमत हैं, मुझे लगता है कि रहस्य.मैं फिगारो जैसे महान रत्नों के साथ बहुत ही शानदार है।
जो

2
सबसे अच्छा विकल्प की तरह लगता है अगर आप अपने प्रोजेक्ट के लिए गितुब और हर्को का उपयोग करते हैं।
फ्लेक्सस

1
आपके सीक्रेट करने में क्या गलत है production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>। इसका मतलब यह भी नहीं होगा कि वास्तविक गुप्त कुंजी उजागर नहीं है। क्या प्रतिबद्ध राज़ में देव और परीक्षण कुंजी को उजागर करने का जोखिम है। यदि यह सब सिर्फ बीज और परीक्षण डेटा है?
जे किलीन

यह भी रेल 6.0.2 में काम करता है, जब कोई रहस्य नहीं है। किसी भी अधिक।
केन त्सोई

54

config/secrets.ymlसंस्करण नियंत्रण में जोड़ें और फिर से तैनात करें। आपको एक पंक्ति निकालने की आवश्यकता हो सकती है .gitignoreताकि आप फ़ाइल को कमिट कर सकें।

मेरे पास यह एक ही मुद्दा था और यह सिर्फ यह निकला कि बायलरप्लेट .gitignoreजीथब ने मेरे रेल एप्लिकेशन के लिए बनाया config/secrets.yml


140
config / secret.yml को कभी भी ऐसा नहीं करना चाहिए, जिसमें आप rep.yml.sample कर सकें और इसे नकली डेटा के साथ भर सकें, लेकिन सुरक्षा के लिए, कभी भी .yml को repos में न करें
user3379926

9
@ user3379926, हरोकू पर एक रेल एप्लिकेशन के संदर्भ में, आप चुन नहीं सकते हैं कि कौन सी फाइलें संस्करण नियंत्रण में शामिल हैं और कौन सी नहीं हैं। रेल 4.1 की उम्मीद है कि गुप्त विन्यास मौजूद होगा अन्यथा आवेदन नहीं चलेगा। यदि आपके पास ऊपर दिए गए प्रश्न में हल किए गए मुद्दे को हल करने के लिए एक तरीका है, तो Git में रहकर रहस्यों का जवाब दें। कृपया इस सलाह को प्रदान करके इस धागे को बेहतर बनाने में मदद करें।
14

9
@danielricecodes आप मैन्युअल रूप से एक इनिशलाइज़र में मान सेट कर सकते हैं। ऐसा कुछ Rails.application.config.secret_key_base = ENV["SECRET_KEY_BASE"]काम करेगा और secrets.ymlस्रोत को जोड़े बिना त्रुटि को दूर करेगा ।
जोशेपवर्थ

11
@ user3379926: जब मैं rails new(इस मामले में, एक Gemfile जिसका railsरत्न संस्करण है 4.2.4) के साथ एक नई रेल एप्लिकेशन config/secrets.ymlउत्पन्न करता है , फ़ाइल उत्पन्न होती है। यह विकास और परीक्षण वातावरण के लिए गुप्त कुंजी pregenerated भी शामिल है, और एक वातावरण चर से उत्पादन वातावरण के लिए secretkey पढ़ता है: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>। मुझे लगता है कि यह पूरी तरह से सुरक्षित है, और वास्तव में उपयोगी है, इस secrets.ymlफ़ाइल को संस्करण नियंत्रण में रखने के लिए , बशर्ते कि वास्तव में गुप्त कुंजी को कभी भी परिभाषित न किया जाए।
तेमू लीस्टी

2
@ajonleonhard क्यों? यदि आप वैसे भी env var से गुप्त कुंजी पढ़ रहे हैं, तो क्या बड़ी बात है? कोई रहस्य उजागर नहीं हो रहा है।
अश्वारोही

13

इसने मेरे लिए काम किया।

SSH आपके उत्पादन सर्वर में और cdआपकी वर्तमान निर्देशिका में, रन bundle exec rake secretया rake secret, आपको आउटपुट के रूप में एक लंबा स्ट्रिंग मिलेगा, उस स्ट्रिंग की प्रतिलिपि बनाएँ।

अब दौड़ो sudo nano /etc/environment

फ़ाइल के निचले भाग पर चिपकाएँ

export SECRET_KEY_BASE=rake secret
ruby -e 'p ENV["SECRET_KEY_BASE"]'

rake secretवह स्ट्रिंग कहां है जिसे आपने कॉपी किया है, उस कॉपी किए गए स्ट्रिंग को उसकी जगह पर चिपकाएं rake secret

सर्वर को पुनरारंभ करें और चलाकर परीक्षण करें echo $SECRET_KEY_BASE


3

जबकि आप अन्य उत्तरों की तरह इनिशियलाइज़र का उपयोग कर सकते हैं, पारंपरिक रेल 4.1+ तरीका है config/secrets.yml। रेल टीम के लिए इसे शुरू करने का कारण इस उत्तर के दायरे से परे है, लेकिन टीएल; डीआर यह है कि secret_token.rbकॉन्फ़िगरेशन और कोड को स्वीकार करता है और साथ ही सुरक्षा जोखिम होने के कारण टोकन को स्रोत नियंत्रण इतिहास और एकमात्र प्रणाली की जांच करने की आवश्यकता होती है पता है कि उत्पादन गुप्त टोकन उत्पादन संरचना है।

आपको इस फ़ाइल को उस .gitignoreतरह से जोड़ना चाहिए जैसे आप config/database.ymlस्रोत नियंत्रण में नहीं जोड़ेंगे ।

की स्थापना के लिए Heroku के अपने कोड का संदर्भ config/database.ymlसे DATABASE_URLउनके में रूबी के लिए Buildpack , मैं समाप्त हो गया उनके रेपो forking और बनाने के लिए इसे संशोधित config/secrets.ymlसे SECRETS_KEY_BASEवातावरण चर।

चूँकि यह सुविधा रेल 4.1 में पेश की गई थी, मुझे लगा कि ./lib/language_pack/rails41.rbइस कार्यक्षमता को संपादित करना और जोड़ना उचित था ।

निम्नलिखित मेरी कंपनी में निर्मित संशोधित बिल्डपैक से स्निपेट है:

class LanguagePack::Rails41 < LanguagePack::Rails4

  # ...

  def compile
    instrument "rails41.compile" do
      super
      allow_git do
        create_secrets_yml
      end
    end
  end

  # ...

  # writes ERB based secrets.yml for Rails 4.1+
  def create_secrets_yml
    instrument 'ruby.create_secrets_yml' do
      log("create_secrets_yml") do
        return unless File.directory?("config")
        topic("Writing config/secrets.yml to read from SECRET_KEY_BASE")
        File.open("config/secrets.yml", "w") do |file|
          file.puts <<-SECRETS_YML
<%
raise "No RACK_ENV or RAILS_ENV found" unless ENV["RAILS_ENV"] || ENV["RACK_ENV"]
%>

<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
          SECRETS_YML
        end
      end
    end
  end

  # ...

end

आप निश्चित रूप से इस कोड को अपने पर्यावरण चर से पढ़े जाने के लिए अन्य रहस्य (जैसे तृतीय पक्ष एपीआई कुंजी, आदि) जोड़ने के लिए बढ़ा सकते हैं:

...
<%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  third_party_api_key: <%= ENV["THIRD_PARTY_API"] %>

इस तरह, आप इस रहस्य को बहुत मानक तरीके से एक्सेस कर सकते हैं:

Rails.application.secrets.third_party_api_key

अपने ऐप को फिर से तैयार करने से पहले, अपने पर्यावरण चर को पहले सेट करना सुनिश्चित करें: हरोकू डैशबोर्ड में SECRET_KEY_BASE सेट करना

फिर अपने हरोकू ऐप में अपना संशोधित बिल्डपैक जोड़ें (या आप मेरा लिंक से स्वागत है) से अधिक है (देखें हेरोकू के दस्तावेज ) और अपने ऐप को फिर से तैयार करें।

बिल्डपोक config/secrets.ymlहर बार जब आप हरोकू के लिए dyno निर्माण प्रक्रिया के हिस्से के रूप में अपने पर्यावरण चर से स्वचालित रूप से आपका निर्माण करेगा git push

संपादित करें: हरोकू के स्वयं के प्रलेखनconfig/secrets.yml पर्यावरण चर से पढ़ने के लिए बनाने का सुझाव देते हैं लेकिन इसका मतलब है कि आपको इस फ़ाइल को स्रोत नियंत्रण में जांचना चाहिए। मेरे मामले में, यह अच्छी तरह से काम नहीं करता है क्योंकि मेरे पास विकास और परीक्षण वातावरण के लिए कठिन रहस्य हैं जो मैं जांच नहीं कर रहा हूं।


जबकि एक महान समाधान। परीक्षण भी
rmcsharry

ध्यान दें कि पर्यावरण चर अधिकांश बुनियादी ढाँचे से लॉग किए जाते हैं, जिसका अर्थ है कि अनएन्क्रिप्टेड पर्यावरण चर लॉग में सादे पाठ में होंगे। मैं अपने रेल एप्लिकेशन के लिए हरोकू का उपयोग नहीं करता हूं, इसलिए इसके लिए कोई सिफारिश नहीं है, लेकिन एडब्ल्यूएस के साथ हम बिल्ड कंटेनर के निर्माण के दौरान पैरामीटर स्टोर से एन्क्रिप्ट किए गए मानों को खींचते हैं और इस प्रकार की सुरक्षित संपत्ति को आबाद करने के लिए उन्हें अनएन्क्रिप्ट करते हैं।
डैनियल नलबैक

1

आप पर वातावरण चर के रूप में करने के लिए गुप्त कुंजी निर्यात कर सकते हैं ~/.bashrcया ~/.bash_profileअपने सर्वर की:

export SECRET_KEY_BASE = "YOUR_SECRET_KEY"

और फिर, आप अपने स्रोत .bashrcया कर सकते हैं .bash_profile:

source ~/.bashrc 
source ~/.bash_profile

अपना राज कभी न बनाएं


1

मेरे मामले में, समस्या यह थी कि config/master.keyसंस्करण नियंत्रण में नहीं था, और मैंने एक अलग कंप्यूटर पर प्रोजेक्ट बनाया था।

रेल द्वारा बनाई गई डिफ़ॉल्ट .gitignore इस फ़ाइल को बाहर करती है। चूंकि इस फ़ाइल के बिना इसे तैनात करना असंभव है, इसलिए इसे किसी भी टीम के सदस्य के कंप्यूटर से तैनात करने में सक्षम होने के लिए, संस्करण नियंत्रण में होना चाहिए।

समाधान: config/master.keyलाइन को .gitignoreउस कंप्यूटर से हटाएं , जहां प्रोजेक्ट बनाया गया था, उस फाइल को कमिट करें, और अब आप git pullदूसरे कंप्यूटर पर कर सकते हैं और उसमें से तैनाती कर सकते हैं।

लोग वैकल्पिक समाधान की पेशकश के बिना, इन फ़ाइलों में से कुछ को संस्करण नियंत्रण के लिए प्रतिबद्ध नहीं करने के लिए कह रहे हैं। जब तक आप एक ओपन सोर्स प्रोजेक्ट पर काम नहीं कर रहे हैं, मुझे क्रेडेंशियल्स सहित प्रोजेक्ट को चलाने के लिए आवश्यक सभी चीजें नहीं करने का कोई कारण नहीं दिखता है।


कभी भी अपनी मास्टर कुंजी फ़ाइल को कमिट न करें। यह आपके ऐप के लिए एक विशाल सुरक्षा भेद्यता है। ओपन सोर्स के लिए यह कठिन है, लेकिन अपने पसंदीदा पासवर्ड मैनेजर के साथ पासवर्ड वॉल्ट बनाना एक बेहतर विकल्प है।
19

रेपो निजी है, तो यह सुरक्षा भेद्यता क्यों होगी? अगर किसी अनधिकृत व्यक्ति की मेरे निजी रेपो तक पहुंच है, तो मुझे लीक एपीआई कीज़ की तुलना में बड़ी समस्याएं हैं। हर प्रोजेक्ट ओपन सोर्स नहीं है।
एंड्रयू कोस्टर

मुझे ऐसा लगता है कि हर कोई इसे दोहरा रहा है क्योंकि उन्होंने इसे एक ओपन-सोर्स प्रोजेक्ट के लिए ट्यूटोरियल में देखा था।
एंड्रयू क्रॉस्टर

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

1

Rails6 के लिए, मैं एक ही समस्या का सामना कर रहा था, जैसा कि मैं फ़ाइलों के बाद गायब था, एक बार मैंने उन्हें जोड़ा, तो समस्या हल हो गई:

1. config/master.key
2. config/credentials.yml.enc

सुनिश्चित करें कि आपके पास यह फ़ाइलें हैं। !!!


0

मैंने क्या किया: अपने उत्पादन सर्वर पर, मैं थिन (मैं इसका उपयोग कर रहा हूं) के लिए एक कॉन्फिग फाइल (confthin.yml) बनाता हूं और निम्नलिखित जानकारी जोड़ता हूं:

environment: production
user: www-data
group: www-data
SECRET_KEY_BASE: mysecretkeyproduction

मैं इसके बाद ऐप लॉन्च करता हूं

thin start -C /whereeveristhefieonprod/configthin.yml

एक आकर्षण की तरह काम करें और फिर संस्करण नियंत्रण पर गुप्त कुंजी की आवश्यकता नहीं है

आशा है कि यह मदद कर सकता है, लेकिन मुझे यकीन है कि यही बात यूनिकॉर्न और अन्य लोगों के साथ भी हो सकती है।


1
क्या आप बता सकते हैं कि यह क्यों / कैसे काम कर रहा है? सवाल उसके लिए था। क्या पतली एक विकल्प है, या क्या यह हेरोकू के साथ संगत है?
एहनबीकैड

-1

मेरे पास एक पैच है जिसे मैंने एक रेल 4.1 ऐप में उपयोग किया है, ताकि मैं लेगसी की जनरेटर का उपयोग जारी रख सकूं (और इसलिए रेल 3 के साथ पीछे की सत्र संगतता), गुप्त_की_बेस को रिक्त होने की अनुमति देकर।

Rails::Application.class_eval do
  # the key_generator will then use ActiveSupport::LegacyKeyGenerator.new(config.secret_token)
  fail "I'm sorry, Dave, there's no :validate_secret_key_config!" unless instance_method(:validate_secret_key_config!)
  def validate_secret_key_config! #:nodoc:
    config.secret_token = secrets.secret_token
    if config.secret_token.blank?
      raise "Missing `secret_token` for '#{Rails.env}' environment, set this value in `config/secrets.yml`"
    end 
  end 
end

जब से मैंने पैच को रिक्वेस्ट किया है तब से इसे पल्स रिक्वेस्ट के रूप में रेल में जमा कर दिया गया है


-1

मैंने config/initializers/secret_key.rbफ़ाइल बना ली है और मैंने केवल निम्न पंक्ति का कोड लिखा है:

Rails.application.config.secret_key_base = ENV["SECRET_KEY_BASE"]

लेकिन मुझे लगता है कि @Erik Trautman द्वारा पोस्ट किया गया समाधान अधिक सुरुचिपूर्ण है;)

संपादित करें: ओह, और आखिरकार मुझे यह सलाह हरोकू पर मिली: https://devcenter.heroku.com/changelog-items4/4 :)

का आनंद लें!


-1

यह अच्छा काम करता है https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 रूट यूजर के लिए संपादन करना चाहिए

$ /etc/profile

लेकिन अगर आप गैर रूट को निम्नलिखित में उत्पन्न कोड डालना चाहिए

$ ~/.bash_profile

$ ~/.bash_login

$ ~/.profile


-1

डेमी मैगस उत्तर ने मेरे लिए रेल 5 तक काम किया।

अपाचे 2 / पैसेंजर / रूबी (2.4) / रेल्स (5.1.6) पर, मुझे लगाना था

export SECRET_KEY_BASE=GENERATED_CODE

डेमी मैगस उत्तर से / etc / apache2 / envvars में, कारण / आदि / प्रोफ़ाइल को नजरअंदाज किया गया लगता है।

स्रोत: https://www.phusionpassenger.com/library/indepth/environment_variables.html#apache


-3

जब मैं https://github.com/github/gitignore/blob/master/Rails.gitignore से .gitignore फ़ाइल का उपयोग करता था, तो मुझे भी यही समस्या थी

.Ignignore फ़ाइल में निम्न पंक्तियों पर टिप्पणी करने के बाद सब कुछ ठीक हो गया।

config/initializers/secret_token.rb
config/secrets.yml

1
जैसा कि हर जगह दोहराया जाता है, जीआईटी को गुप्त करने के लिए।
कॉफि सिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.