কীভাবে "উত্পাদন 'পরিবেশের জন্য` গোপন_কি_বাস "মিস করার ত্রুটিটি সমাধান করবেন (রেল ৪.১)


169

আমি স্ক্র্যাচ থেকে রেল ৪.১ ব্যবহার করে একটি রেল অ্যাপ্লিকেশন তৈরি করেছি এবং আমি একটি অদ্ভুত সমস্যার মুখোমুখি হয়েছি যা আমি সমাধান করতে পারছি না।

যতবারই আমি হিরোকুতে আমার অ্যাপ্লিকেশন স্থাপন করার চেষ্টা করি ততবার আমি একটি ত্রুটি পাই:

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 ফাইলটি কনফিগার করেছি এবং এখন সবকিছু ঠিকঠাক কাজ করে
পাওলো লরেন্টি

আমরা যখন রেল ৪-তে আপগ্রেড করেছি তখন আমাদেরও এই সমস্যা ছিল। আমাদের ক্ষেত্রে এটি ছিল কারণ আমাদের একটি কাস্টম পরিবেশের নাম ছিল এবং এটি সিক্রেটস.আইএমএলে প্রতিফলিত হয়নি। আমাকে কেবল অ-মানক নাম, প্রতিশ্রুতিবদ্ধকরণ এবং পুনরায় স্থাপনার সহ ফাইলটিতে একটি লাইন যুক্ত করতে হয়েছিল।
whognu

ভবিষ্যতের পাঠকদের জন্য: এই উত্তরটি সম্ভবত সবচেয়ে সহজ এবং সঠিক:
স্ট্যাকওভারফ্লো.com

উত্তর:


208

আমার একই সমস্যা ছিল এবং প্রতিবার আমি প্রোডাকশন সার্ভারে লগ ইন করে এমন একটি পরিবেশের ভেরিয়েবল লোড করার জন্য এটি সমাধান করেছি এবং এটিটি কনফিগার করার পদক্ষেপগুলির একটি মিনি-গাইড তৈরি করেছি:

আমি ইউনিকর্ন ভি ৪.৮.২ এর সাথে রেল ৪.১ ব্যবহার করছিলাম এবং যখন আমি আমার অ্যাপ্লিকেশন মোতায়েন করার চেষ্টা করেছি এটি সঠিকভাবে শুরু হয়নি এবং unicorn.logফাইলটিতে আমি এই ত্রুটি বার্তাটি পেয়েছি:

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

কিছু গবেষণা করার পরে আমি জানতে পেরেছিলাম যে 4..১ রেলগুলি পরিচালনা করার পদ্ধতি পরিবর্তন করেছে 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আপনার প্রোডাকশন সার্ভারে পরিবেশের পরিবর্তনশীল ব্যবহার করার পরামর্শ দেয় । এই ত্রুটিটি সমাধান করার জন্য আপনার প্রোডাকশন সার্ভারে লিনাক্সের জন্য পরিবেশগত পরিবর্তনশীল (আমার ক্ষেত্রে উবুন্টু) তৈরি করতে আপনার এই পদক্ষেপগুলি অনুসরণ করা উচিত:

  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 দেখতে পাচ্ছে না। প্রিন্টেনভ এটি দেখায়, রেল গ উত্পাদনও এটি প্রদর্শন করে, যদি আমি ENV পরিদর্শন করি। তবে, আমি ইউনিকর্ন পুনরায় চালু করার সময় আমার কোনও প্রভাব নেই। একমাত্র উপায়, এখন এটি কাজ করে, এটি সরাসরি সিক্রেটস.আইএমএলে আটকানো হয়
আন্তোনাল

1
এটি আমার পক্ষে কাজ করেছে। আপনার সম্পূর্ণ ব্যাখ্যার জন্য আপনাকে ধন্যবাদ। আমি কেবল শিখেছি এমন একটি মণি রয়েছে যা একটি অ্যাপ্লিকেশন এর পরিবেশ পরিবর্তনশীল পরিচালনার জন্য বিদ্যমান। 'ডোটেনভ' হিরকু-র একজন এবং 'ফোরম্যান'। ত্রুটিটি ম্যানুয়ালি এইভাবে সংশোধন করা যখন শিক্ষা ছিল, সম্ভবত সেই রত্নগুলির মধ্যে একটি ব্যবহার প্রক্রিয়াটি প্রবাহকে প্রবাহিত করবে?
নিক রেজ রেজ

আমি আনন্দিত যে আমার উত্তরটি সহায়ক ছিল, রত্ন বিকল্পগুলি @ নিনজা08 এর জন্য ধন্যবাদ, তারা অবশ্যই এই প্রক্রিয়াটি সহজতর করে, মূলত যারা সার্ভারটি পরিচালনা করতে ক্যাপিসিট্রানো বা অন্যান্য বর্ধমান সরঞ্জাম ব্যবহার করেন তাদের জন্য :)
ডেমি ম্যাগাস

ডেমি মাগাসের দুর্দান্ত নির্দেশাবলী অনুসরণ করে আমি এরকম কিছু করেছি: সিডি / ভার / www / রেল; rvm ext-rbx-2.5.2@rails ব্যবহার করুন; SKB_FILE = / var / www / .secret_key_base; প্রতিধ্বনি "রফতানি SECRET_KEY_BASE = $ (RAILS_ENV = উত্পাদন রেক গোপন)"> K এসকেবি_এফিল; । $ SKB_FILE; প্রতিধ্বনি "। $ এসকেবি_ফাইলে" | টি -a ~ / .bashrc ~ / .Bash_profile; chmod o-rwx $ SKB_FILE;
ডেভিড উইনিস্কি

চমৎকার উত্তর!! আমি জানি না কেন এটি আমার জন্য সমাধান করা হয় না, আমি প্রশ্ন তৈরি করি স্ট্যাকওভারফ্লো.com
অ্যাড্রিয়ানো

84

আমি ধরে নিতে যাচ্ছি যে আপনার secrets.ymlউত্স নিয়ন্ত্রণে আপনার চেক করা নেই (যেমন এটি .gitignoreফাইলটিতে রয়েছে)) এমনকি যদি এটি আপনার পরিস্থিতি নাও হয় তবে এই প্রশ্নটি দেখছেন এমন আরও অনেক লোক এটি করেছে কারণ তাদের কোডটি গিথুবে প্রকাশ করা হয়েছে এবং তাদের গোপন কীটি চারপাশে ভাসতে চায় না।

যদি এটি উত্স নিয়ন্ত্রণে না থাকে, হিরোকু এটি সম্পর্কে জানেন না। সুতরাং রেলগুলি সন্ধান করছে Rails.application.secrets.secret_key_baseএবং এটি সেট করা হয়নি কারণ রেলগুলি সেট secrets.ymlকরে না যা ফাইলটি যা পরীক্ষা করে তা উপস্থিত নেই। আপনার কাজের config/environments/production.rbফাইলে andুকে নিম্নলিখিত লাইনটি যুক্ত করা সহজ উপায় ar

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

এটি আপনার অ্যাপ্লিকেশনটিকে এনভায়রনমেন্ট ভেরিয়েবলটি সন্ধান করার পরিবর্তে গোপন কীটি সেট করতে বলে secrets.yml। এটি আমার সামনের অংশটি জানার জন্য অনেক সময় বাঁচাতে পারত।


15
এটি সেরা উত্তর। Figaroএবং heroku_secretsরেইলগুলি SECRET_KEY_BASEবেঁচে থাকে তা না জানলে কিছুই করবেন না ENV। আমি এই চিন্তাভাবনার সাথে লড়াই করে যাচ্ছি যে যদি হিরোকুতে কনফিগারেশনের উপস্থিতি উপস্থিত থাকত, তবে তার উপস্থিতি অনুসারে রেলগুলি এটিকে বেছে নেবে, তবে এখন এটি অন্ধভাবে স্পষ্টভাবে প্রতীয়মান হয়েছে যে রেলগুলি কোথায় দেখতে হবে তা জানতে হবে। আমি ভাবছিলাম যে কীভাবে গোপন কী বেস বিষয় সম্পর্কে চিন্তা না করেই আমি গিথুবটিতে কোড রাখতে পারি; এখন আমি জানি.
flanger001

1
সম্মত, আমি মনে করি যে সিক্রেটস.আইএমএল ফিগারোর মতো দুর্দান্ত রত্নগুলির সাথে অতিরিক্ত অতিরিক্ত।
জো

2
আপনি যদি আপনার প্রকল্পের জন্য গিথুব এবং হিরকু ব্যবহার করেন তবে সেরা বিকল্প হিসাবে মনে হচ্ছে।
ফ্লেক্সাস

1
আপনার সিক্রেটস.আইএমএল প্রতিশ্রুতিবদ্ধ করার সাথে কী সমস্যা production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>। এর অর্থ এই নয় যে আসল গোপন কীটি উন্মোচিত হয়নি। প্রতিশ্রুতিবদ্ধ সিক্রেটস.আইএমএলে ডেভ এবং টেস্ট কীগুলি প্রকাশ করার ঝুঁকি রয়েছে কি যদি এটি কেবলমাত্র বীজ এবং পরীক্ষার ডেটা হয়?
জে কিলিন

এটি আর 6.0.2 রেলের মধ্যেও কাজ করে, যখন আর কোনও সিক্রেটস নেই ym
কেন সোসাই

54

যোগ config/secrets.ymlসংস্করণ নিয়ন্ত্রণ এবং আবার স্থাপন। আপনার কোনও লাইন অপসারণ করতে হবে .gitignoreযাতে আপনি ফাইলটি প্রতিশ্রুতিবদ্ধ করতে পারেন।

আমার ঠিক এই একই সমস্যাটি ছিল এবং এটি সবেমাত্র .gitignoreআমার রেল অ্যাপ্লিকেশনগুলির জন্য তৈরি বয়লারপ্লেট গিথুব অন্তর্ভুক্ত রয়েছে config/secrets.yml


140
কনফিগারেশন / সিক্রেটস.আইএমএল এর রেপোটি কখনই ব্যবহার করা উচিত নয় আপনি করতে পারেন ym জিম.স্যাম্পল এবং এটি জাল ডেটা দিয়ে পূরণ করুন তবে সুরক্ষার জন্য, রেপোতে কখনও জিম করবেন না
ব্যবহারকারী 3379926

9
@ ব্যবহারকারী 3379926, হেরোকুতে একটি রেল অ্যাপ্লিকেশনের প্রসঙ্গে, আপনি সংস্করণ নিয়ন্ত্রণে কোন ফাইল অন্তর্ভুক্ত রয়েছে এবং কোনটি নয় তা বেছে নিতে বা বেছে নিতে পারবেন না। 4.1 কিলগুলি গোপন কনফিগারেশনটির উপস্থিতি প্রত্যাশা করে অন্যথায় অ্যাপ্লিকেশনটি চলবে না। গিটের সিক্রেটস.আইএমএল ফাইলটি প্রতিশ্রুতি না দিয়ে যদি উপরের প্রশ্নে উত্থিত সমস্যাটি সমাধান করার কোনও উপায় থাকে তবে দয়া করে এই পরামর্শটি সরবরাহ করে এই থ্রেডটি উন্নত করতে সহায়তা করুন।
ড্যানিয়েলিরিকোডস

9
@ ড্যানিয়েল্রিকিকোডস আপনি ম্যানুয়ালি একটি ইনিশিয়ালাইজারে মান সেট করতে পারেন। এমন কিছু Rails.application.config.secret_key_base = ENV["SECRET_KEY_BASE"]কাজ করবে যা উত্সটিতে যোগ না করে ত্রুটিটি সরিয়ে ফেলবে secrets.yml
জোশেপওয়ার্থ

11
@ ব্যবহারকারী 3379926: আমি যখন একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করি rails new(উত্পাদনের ক্ষেত্রে, এই ক্ষেত্রে একটি railsরত্ন ফাইল যার রত্নটির সংস্করণ রয়েছে 4.2.4) তখন ফাইলটি config/secrets.ymlউত্পন্ন হয়। এটা তোলে উন্নয়ন এবং পরীক্ষা পরিবেশের জন্য গোপন চাবি pregenerated, এবং একটি পরিবেশ পরিবর্তনশীল থেকে উৎপাদন পরিবেশের জন্য secretkey লেখা আছে: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>। আমার কাছে মনে হয় যে এই secrets.ymlফাইলটি সংস্করণ নিয়ন্ত্রণে রাখতে পুরোপুরি নিরাপদ এবং সত্যই কার্যকর , শর্ত আছে যে সেখানে কেউ কখনও সত্যই গোপন কীটি সংজ্ঞায়িত করে না।
তিমু লইস্তি

2
@ জেসনলোনহার্ড কেন? আপনি যদি এনভির ভার্সের গোপন কীটি যেভাবেই পড়ছেন তবে বড় বিষয় কী? কোন গোপন রহস্য উন্মোচিত হচ্ছে না।
ঘোড়াযুক্ত

13

এটি আমার পক্ষে কাজ করেছে।

আপনার প্রোডাকশন সার্ভারে এবং 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উত্স নিয়ন্ত্রণে যোগ করবেন না ।

রুবির জন্য তাদের বিল্ডপ্যাকconfig/database.yml থেকে সেট আপ করার জন্য হিরোকুর নিজস্ব কোডটি উল্লেখ করে আমি তাদের রেপো কাঁটাচামচ করে শেষ করেছি এবং পরিবেশ পরিবর্তনশীল থেকে তৈরি করতে এটি সংশোধন করেছি ।DATABASE_URLconfig/secrets.ymlSECRETS_KEY_BASE

যেহেতু এই বৈশিষ্ট্যটি রেল ৪.১ এ প্রবর্তিত হয়েছিল, তাই আমি ./lib/language_pack/rails41.rbএই কার্যকারিতাটি সম্পাদনা করে যুক্ত করা উপযুক্ত বলে মনে করি ।

নিম্নোক্ত স্নিপেট পরিবর্তিত buildpack আমি আমার কোম্পানিতে নির্মিত থেকে:

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যাওয়ার সময় ডায়নো বিল্ড প্রক্রিয়ার অংশ হিসাবে স্বয়ংক্রিয়ভাবে আপনার পরিবেশ পরিবর্তনশীল থেকে আপনার তৈরি করবে git push

সম্পাদনা: হেরোকুর নিজস্ব ডকুমেন্টেশনconfig/secrets.yml পরিবেশ পরিবর্তনশীল থেকে পড়ার জন্য তৈরি করার পরামর্শ দেয় তবে এটি বোঝায় যে আপনার এই ফাইলটি উত্স নিয়ন্ত্রণে পরীক্ষা করা উচিত। আমার ক্ষেত্রে, এটি ভাল কাজ করে না যেহেতু আমি বিকাশ এবং পরীক্ষার পরিবেশগুলির জন্য হার্ডকডযুক্ত গোপনীয়তাগুলি রেখেছি যা আমি বরং চেকইন করব না।


.ডোটেনভ এবং .ফরমান রত্নগুলির এই দুর্দান্ত সমাধানের সময়: "বিকাশ এবং পরীক্ষার পরিবেশের জন্য আমার কাছে হার্ডকোডযুক্ত গোপনীয়তা রয়েছে" - সুতরাং এই রত্নগুলি ব্যবহার করার অর্থ আপনার বিল্ডপ্যাকের দরকার নেই কারণ আপনি আপনার গোপন ফাইলগুলিতে দেবের জন্য ENV_VAR ব্যবহার করতে পারেন and পরীক্ষাও
rmcharry

নোট করুন যে এনভায়রনমেন্ট ভেরিয়েবলগুলি বেশিরভাগ অবকাঠামো দ্বারা লগ হয়, যার অর্থ এনক্রিপ্ট করা এনভায়রনমেন্ট ভেরিয়েবলগুলি লগগুলিতে সরল পাঠ্যে থাকবে। আমি আমার রেল অ্যাপসের জন্য হিরোকু ব্যবহার করি না, সুতরাং এর জন্য কোনও প্রস্তাবনা নেই, তবে এডাব্লুএস এর সাহায্যে আমরা বিল্ড কনটেইনারের অভ্যন্তর থেকে প্যারামিটার স্টোর থেকে এনক্রিপ্ট করা মানগুলি টানি এবং এই ধরণের সুরক্ষিত সম্পদ তৈরি করতে তাদের এনক্রিপ্ট করি।
ড্যানিয়েল

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অন্য কম্পিউটারে এবং এটি থেকে স্থাপন করতে পারেন।

লোকেরা বিকল্প সমাধানের প্রস্তাব না দিয়ে সংস্করণ নিয়ন্ত্রণে এই ফাইলগুলির কয়েকটি প্রতিশ্রুতিবদ্ধ না করার কথা বলছে। যতক্ষণ না আপনি ওপেন সোর্স প্রকল্পে কাজ করছেন না, ততক্ষণ আমি প্রমাণপত্রাদি সহ প্রকল্পটি চালানোর জন্য প্রয়োজনীয় সমস্ত কিছু না করার কোনও কারণ দেখছি না।


আপনার মাস্টার কী ফাইলটি কখনও গিটে প্রতিশ্রুতিবদ্ধ করবেন না। এটি আপনার অ্যাপ্লিকেশনটির জন্য একটি বিশাল সুরক্ষা দুর্বলতা। মুক্ত উত্সের জন্য এটি শক্ত, তবে আপনার পছন্দসই পাসওয়ার্ড ম্যানেজারের সাথে একটি পাসওয়ার্ড ভল্ট তৈরি করা আরও ভাল বিকল্প।
wsizoo

রেপো ব্যক্তিগত হলে কেন এটি সুরক্ষার দুর্বলতা হবে? যদি কোনও অননুমোদিত ব্যক্তির আমার ব্যক্তিগত রেপোতে অ্যাক্সেস থাকে তবে আমার কাছে কেবল এপিআই কীগুলি ফাঁস হওয়ার চেয়ে বড় সমস্যা রয়েছে। প্রতিটি প্রকল্পই মুক্ত উত্স নয়।
অ্যান্ড্রু কোস্টার

আমার মনে হচ্ছে সবাই কেবল এটি পুনরুক্ত করছে কারণ তারা ওপেন-সোর্স প্রকল্পের টিউটোরিয়ালে দেখেছিল saw
অ্যান্ড্রু কোস্টার

এই পুরো জিনিসটি অতিরিক্ত বিভ্রান্তিকর কারণ পুরাতন secrets.ymlফাইল সম্পর্কে প্রচুর পুরানো ডকুমেন্টেশন রয়েছে যা বিগত বেশ কয়েকটি রেল সংস্করণের জন্য অবচিত করা হয়েছে। এই স্ট্যাক ওভারফ্লো প্রশ্নটিতে নিজেই এক টন উত্তর রয়েছে এবং তারা প্রায় সকলেই এই প্রাচীন এপিআই ব্যবহার করে।
অ্যান্ড্রু কোস্টার 19

1

রেল 6 এর জন্য আমিও একই সমস্যার মুখোমুখি হয়েছি, যেহেতু আমি নিম্নলিখিত ফাইলগুলি অনুপস্থিত ছিলাম, একবার আমি তাদের যুক্ত করলে, সমস্যাটি সমাধান হয়েছে:

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

আপনার কাছে এই ফাইলগুলি রয়েছে তা নিশ্চিত করুন !!!


0

আমি যা করেছি: আমার প্রোডাকশন সার্ভারে, আমি পাতলা (আমি এটি ব্যবহার করছি) এর জন্য একটি কনফিগার ফাইল (কনফথিন.আইএমএল) তৈরি করি এবং নিম্নলিখিত তথ্য যুক্ত করি:

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

আমি তারপরে অ্যাপটি চালু করি

thin start -C /whereeveristhefieonprod/configthin.yml

কবজির মতো কাজ করুন এবং তারপরে সংস্করণ নিয়ন্ত্রণে গোপন কী থাকা দরকার নেই

আশা করি এটি সহায়তা করতে পারে তবে আমি নিশ্চিত ইউনিকর্ন এবং অন্যদের সাথেও একই কাজ করা যেতে পারে।


1
আপনি কেন ব্যাখ্যা করতে পারেন / কেন এটি কাজ করছে? প্রশ্ন ছিল হিরকুর জন্য for পাতলা কোনও বিকল্প, বা এটি হিরকুর সাথে সামঞ্জস্যপূর্ণ?
অহনিবিজ্যাকড

-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"]

তবে আমি মনে করি @ এরিক ট্রুটম্যান পোস্ট করা সমাধানটি আরও মার্জিত;)

সম্পাদনা: ওহ, এবং অবশেষে আমি হিরোকুতে এই পরামর্শটি পেয়েছি: https://devcenter.heroku.com/changelog-items/426 :)

উপভোগ করুন!


-1

এটি ভাল কাজ করছে https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 মূল ব্যবহারকারীকে সম্পাদনা করা উচিত

$ /etc/profile

তবে আপনি যদি রুট না হন তবে নিম্নলিখিত কোডটিতে উত্পন্ন কোডটি রাখা উচিত

$ ~/.bash_profile

$ ~/.bash_login

$ ~/.profile


-1

ডেমি মাগুসের উত্তরটি আমার কাছে রেল 5 পর্যন্ত কাজ করেছে।

অ্যাপাচি ২ / যাত্রী / রুবি (২.৪) / রেলগুলি (৫.১..6) রাখতে হয়েছিল

export SECRET_KEY_BASE=GENERATED_CODE

/ etc / apache2 / envvars এ ডেমি মাগাসের উত্তর থেকে কারণ / ইত্যাদি / প্রোফাইল উপেক্ষা করা হবে বলে মনে হচ্ছে।

সূত্র: https://www.phusionpasenter.com/library/indepth/en वातावरण_ variables.html# apache


-3

Https://github.com/github/gitignore/blob/master/Rails.gitignore থেকে .gitignore ফাইলটি ব্যবহার করার পরে আমার একই সমস্যা হয়েছিল

.Gitignore ফাইলটিতে নিম্নলিখিত লাইনগুলি মন্তব্য করার পরে সবকিছু ঠিকঠাক হয়ে গেছে।

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

1
যেমন সর্বত্র পুনরাবৃত্তি হয়, সিক্রেটস.আইএমএল বা সিক্রেট_ টোকেন.আরবি গিটার প্রতিশ্রুতি দেওয়ার পরামর্শ দেওয়া হয় না।
cofiem
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.