রেলগুলিতে কীভাবে কাস্টম কনফিগারেশন ভেরিয়েবলগুলি সংজ্ঞায়িত করতে হয়


337

আমি ভাবছিলাম যে কীভাবে রেল অ্যাপ্লিকেশনটিতে কাস্টম কনফিগারেশন ভেরিয়েবল যুক্ত করা যায় এবং কীভাবে কন্ট্রোলারে সেগুলি অ্যাক্সেস করা যায়, উদাহরণস্বরূপ আমি কনফিগারেশন ফাইলগুলিতে একটি আপলোড_ডাইরেক্টরিটি সংজ্ঞায়িত করতে সক্ষম হতে চাই বলুন ডেভলপমেন্ট.আরবি এবং এটি আমার একটিতে অ্যাক্সেস করতে সক্ষম হবেন কন্ট্রোলার।

দ্বিতীয়ত, আমি আমার অ্যাপ্লিকেশনটিতে আপলোডগুলির জন্য এস 3 সমর্থন করার পরিকল্পনা করছিলাম, যদি আমি এস 3 অ্যাক্সেস, সিক্রেট কী সহ কোনও ইয়ামল ফাইল যুক্ত করতে চাই, তবে আমি কীভাবে এটি আমার রেলস অ্যাপ্লিকেশনটিতে শুরু করব এবং আমি যে মানগুলি সংজ্ঞায়িত করেছি তা কীভাবে অ্যাক্সেস করব? যে কনফিগারেশন ফাইল।



কিছুটা সম্পর্কিত: নতুন কনফিগারেশন ভেরিয়েবলগুলি যুক্ত করার সময় সার্ভারটি পুনরায় চালু করতে ভুলবেন না।
ড্যামিয়েন Ó সিল্লাইঘ

উত্তর:


165

আপডেট 1

খুব প্রস্তাবিত: আমি আজকাল রেল কনফিগার মণির সাথে যাচ্ছি এটি সরবরাহ করে সূক্ষ্ম দানাদার নিয়ন্ত্রণের জন্য।

Update2

আপনি যদি দ্রুত সমাধান চান তবে নীচে জ্যাক প্র্যাটের উত্তরটি দেখুন check

যদিও নীচে আমার মূল উত্তরটি এখনও কাজ করে, এই উত্তরটি এখন পুরানো। আমি আপডেট 1 এবং 2 তাকান সুপারিশ।

আসল উত্তর:

দ্রুত সমাধানের জন্য, রায়ান বেটস দ্বারা কাস্ট করা "ওয়াইএএমএল কনফিগারেশন ফাইল" স্ক্রিনটি দেখা খুব সহায়ক হবে।

সংক্ষেপে:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]

# application.rb
if APP_CONFIG['perform_authentication']
  # Do stuff
end

62
এই উত্তরটি সেকেলে। দেখুন stackoverflow.com/questions/1450285/... নিচে
mattwynne

8
@ ম্যাট: রেল 3 মুক্তি পেয়েছে, বা সবাই এখন রেল 3 এ রয়েছে বলে বা ...?
লাসে ভি কার্লসেন

পুরানো তারিখের জন্য ধন্যবাদ। আমি ঘৃণা করি যে জেলগুলি সম্পর্কে - 1 বছর আগের কোডটি খুব পুরানো।
jcollum

2
পাগল 3+ মধ্যে YAML পদ্ধতি ব্যবহার অনুপস্থিত যে কেউ জন্য, আপনি প্রতিস্থাপন করতে হবে RAILS_ENVসঙ্গে Rails.envএবং RAILS_ROOTসঙ্গে Rails.root
রায়ান

আমি Rails_config চেষ্টা করেছি। ডকুমেন্টেশনে তারা আমার অ্যাপ.আরবিতে রেলকনফিগ রেজিস্ট্রেশন করার জন্য আমাকে নির্দেশ দেয়। আমি ধরে নিলাম যে app.rb = config / application.rb application তবে অ্যাপ্লিকেশন.আরবিতে কোথায় আমি রেইলসনফিগ লাইন রেজিস্টার করব?
Nhím Hổ Báo

375

রেলস 3 এ, অ্যাপ্লিকেশন নির্দিষ্ট কাস্টম কনফিগারেশন ডেটা অ্যাপ্লিকেশন কনফিগারেশন অবজেক্টে স্থাপন করা যেতে পারে। কনফিগারেশনটি সূচনা ফাইল বা পরিবেশের ফাইলগুলিতে বরাদ্দ করা যেতে পারে - প্রদত্ত অ্যাপ্লিকেশনটির জন্য বলুন MyApp:

MyApp::Application.config.custom_config_variable = :my_config_setting

অথবা

Rails.configuration.custom_config_variable = :my_config_setting

সেটিংটি পড়ার জন্য, বিন্যাসটি বিন্যাস ছাড়াই কেবল কনফিগারেশন ভেরিয়েবলকে কল করুন:

Rails.configuration.custom_config_variable
=> :my_config_setting

আপডেট আপডেট 4

4 রেলগুলিতে এর জন্য একটি নতুন উপায় রয়েছে => http://guides.rubyonrails.org/configuring.html# কাস্টম- কনফিগারেশন

এখানে চিত্র বর্ণনা লিখুন


11
এটা আমার জন্য কাজ করে. আমি পরিবেশ / {পরিবেশ} .rb, যেমন, পরিবেশ / উন্নয়ন.rb- এ আমার পরিবেশ নির্দিষ্ট কনফিগারেশন সেটিংস রেখেছি। পরিবর্তন করে আপনি নিজের সার্ভারটি পুনরায় চালু করেছেন তা নিশ্চিত করুন। আরও মার্জিত কৌশল থাকতে পারে তবে আমি একটি বিদ্যমান অ্যাপ্লিকেশন আপগ্রেড করছি যা পূর্বে একই ফাইলটিতে ENV ['XXX'] ব্যবহার করেছিল এবং যেহেতু আমি আপগ্রেড করার সময় রিফ্যাক্টরিংয়ের পরিমাণ সীমাবদ্ধ করতে চাই, এটি কার্যকরভাবে কার্যকর হয়েছিল।
pduey

13
এটি অ্যাসাইনমেন্ট তবে আপনি কীভাবে এই মানটি অ্যাক্সেস করবেন?
কেভজিটলার

9
যদি আপনি একটি রেল x.x অ্যাপ্লিকেশন.আর.বি.-এর অ্যাপ্লিকেশনটিতে লক্ষ্য করেন তবে এটি উত্তর হিসাবে "অ্যাপ্লিকেশন কনফিগারেশনটি কনফিগারেশন / ইনিশিয়েলাইজারের ফাইলগুলিতে যেতে হবে"। ভেরিয়েবলটি কীভাবে অ্যাক্সেস করবেন সে সম্পর্কে প্রচুর ডকুমেন্টেশন রয়েছে ( এজগুইডস.ব্রেইনরাইলস.আর / কনফিগুরিং html )। যেমন প্রারম্ভকালের ফোল্ডারে কিছু_variables.rb নামক একটি ফাইলে উপরে বর্ণিত ভেরিয়েবলটি রাখুন (আপনার অ্যাপের নামের সাথে মাই অ্যাপ ব্যবহার করে) তবে আপনি যখন এটি ব্যবহার করতে চান কেবল কনফিগারেশনকে কল করুন কাস্টম_কনফিগ_ভিরিয়েবল আপনি অবশ্যই নিজের পছন্দসই নামটি ব্যবহার করতে পারেন । @ জ্যাক প্র্যাট আপনি আরও একটি সম্পূর্ণ উত্তর সম্পাদনা করতে পারেন?
জামেস্ক

48
বুনো, সরল: পথ: config/environments/production.rb কনফিগার: config.whatever = false এটিকে যে কোনও জায়গায় অ্যাক্সেস করুন: Rails.configuration.whatever
ভিক্টর এস

5
সাবধানতা অবলম্বন করুন যে আপনি যদি কেবলমাত্র উত্পাদনে কিছু সেট করেন এবং অন্য পরিবেশে এটি অ্যাক্সেস করার চেষ্টা করেন তবে এটি অভিযোগ করবে undefined method
লুলালালা

69

Ails.০.৫ রেলগুলিতে, নিম্নলিখিত পদ্ধতির আমার পক্ষে কাজ করেছে:

ইন config/environments/development.rb, লিখুন

config.custom_config_key = :config_value

মানটি custom_config_keyতখন অন্য ফাইলগুলি ব্যবহার করে উল্লেখ করা যেতে পারে can

Rails.application.config.custom_config_key

4
সাবধানতা অবলম্বন করুন যে আপনি যদি কেবলমাত্র উত্পাদনে কিছু সেট করেন এবং অন্য পরিবেশে এটি অ্যাক্সেস করার চেষ্টা করেন তবে এটি অভিযোগ করবে undefined method
লুলালালা

আমি এটি রেল ৪.১ এ চেষ্টা করেছি এবং আমি ত্রুটিগুলি পাচ্ছি, "... method_missing': undefined method রেল :: অ্যাপ্লিকেশন :: কনফিগারেশন: 0x007f9f735b7240> ..." এর জন্য " স্টোর '' আমি "config.store.works" কনফিগার ভেরিয়েবল যুক্ত করার চেষ্টা করছিলাম।
স্পুডুন

1
@ স্পুডুন আপনি সেই ত্রুটিটি পেয়ে যাচ্ছেন, কারণ রেলগুলি কী তা জানে না store। এই উত্তরে পদ্ধতিটি ব্যবহার করার জন্য, আপনি হয় আপনার ভেরিয়েবলটির নাম পরিবর্তন করতে পারেন store_works, বা এতে নির্ধারিত একটি config.storeব্লক তৈরি করতে পারেন works
পল পেটেনগিল

ধন্যবাদ, আমি অবশেষে এটি বুঝতে পেরেছি। এগুলি নেস্টেড হ্যাশগুলি তাই আমি আমার কনফিগারেশনের নামগুলি ব্যবহার করতে চাইলে খালি হ্যাশগুলি পুনরাবৃত্তভাবে শুরু করতে হবে।
স্পুডুন

31

এটি রেল ৩.১ এ কাজ করে:

কনফিগারেশন / এনভায়রনমেন্ট.আরবিতে (অথবা কনফিগারেশন / এনভায়রনমেন্টস .. .. নির্দিষ্ট পরিবেশকে টার্গেট করতে):

YourApp::Application.config.yourKey = 'foo'

এটি নিয়ামক বা এই জাতীয় মতামতগুলিতে অ্যাক্সেসযোগ্য হবে:

YourApp::Application.config.yourKey

(আপনার অ্যাপ্লিকেশন নামটি আপনার অ্যাপ্লিকেশন নাম দ্বারা প্রতিস্থাপন করা উচিত))

দ্রষ্টব্য : এটি রুবি কোড, সুতরাং আপনার কাছে যদি কনফিগার কী প্রচুর থাকে তবে আপনি এটি করতে পারেন:

কনফিগারেশন / পরিবেশে.আরবি:

YourApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end

2
উট কেস: হে সাপ_কেস ব্যবহার করুন!
siegy22

30

কারাগারে 4

ধরে নিচ্ছি যে আপনি আপনার কাস্টম ভেরিয়েবলগুলি ইয়ামল ফাইলে রেখেছেন:

# config/acme.yml
development:
  :api_user: 'joe'
  :api_pass: 's4cret'
  :timeout: 20

এগুলি লোড করার জন্য একটি ইনিশিয়ালাইজার তৈরি করুন:

# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme

Rails.application.configure do
  config.acme = ActiveSupport::OrderedOptions.new
  config.acme.api_user = acme_config[:api_user]
  config.acme.api_pass = acme_config[:api_pass]
  config.acme.timeout  = acme_config[:timeout]
end

এখন আপনার অ্যাপের যেকোন জায়গায় আপনি এই মানগুলি অ্যাক্সেস করতে পারেন:

Rails.configuration.acme.api_user

এটি সুবিধাজনক যা Rails.application.config_for :acmeআপনার লোড করবে acme.ymlএবং সঠিক পরিবেশটি ব্যবহার করবে।


21

যেহেতু রেলগুলি ৪.২, অতিরিক্ত রত্ন ছাড়াই, আপনি কেবল ব্যবহার করে কনফিগারেশন / হাই.আইএমএল লোড করতে পারেন Rails.application.config_for :hi

উদাহরণ স্বরূপ:

  1. touch config/passwords.yml

        #config/passwords.yml
        development:
          username: 'a'
          password: 'b'
        production:
          username: 'aa'
          password: 'bb'
  1. touch config/initializers/constants.rb

    #config/initializers/constants.rb
    AUTHENTICATION = Rails.application.config_for :passwords
  1. এবং এখন আপনি AUTHENTICATIONআপনার প্রয়োগের যে কোনও জায়গায় ধ্রুবক ব্যবহার করতে পারেন :

    #rails c production
    :001> AUTHENTICATION['username'] => 'aa'
  2. তারপর যোগ passwords.yml করার .gitignore : echo /config/passwords.yml >> .gitignoreআপনার সান্ত্বনা জন্য একটি উদাহরণ ফাইল তৈরি cp /config/passwords.yml /config/passwords.example.ymlএবং তারপর মাত্র প্রকৃত উত্পাদন মান আপনার উৎপাদন কনসোলে আপনার উদাহরণ ফাইল সম্পাদনা করুন।


13

আমি কেবল ails.২ রেলের সর্বশেষতম শীতল সামগ্রীর জন্য এটি আপডেট করতে চেয়েছিলাম, আপনি এখন আপনার config/**/*.rbফাইলগুলির মধ্যে এটি করতে পারেন:

config.x.whatever.you.want = 42

... এবং এটি আপনার অ্যাপ্লিকেশনটিতে এটি উপলভ্য হবে:

Rails.configuration.x.whatever.you.want

এখানে আরও দেখুন: http://guides.rubyonrails.org/configuring.html#custom-configration


8

এই ঝরঝরে রত্নটি ঠিক এমনটি করে দেখুন: https://github.com/mislav/choice

এইভাবে আপনার সংবেদনশীল ডেটা উন্মুক্ত উত্স প্রকল্পগুলিতে প্রকাশিত হবে না


4

আমি ওয়াইএএমএল সেটিংসের জন্য একটি সহজ প্লাগইন তৈরি করেছি: তবুও

এটি খেলের উত্তরটিতে কোডের অনুরূপ ফ্যাশনে কাজ করে তবে আপনাকে কেবল এই ওয়াইএএমএল কনফিগারেশন ফাইলটি যুক্ত করতে হবে:

app/config/yetting.yml

প্লাগইনটি গতিশীলভাবে একটি বর্গ তৈরি করে যা আপনাকে আপনার অ্যাপ্লিকেশনে শ্রেণি পদ্ধতি হিসাবে YML সেটিংস অ্যাক্সেস করতে দেয়:

Yetting.your_setting

এছাড়াও, আপনি যদি অনন্য নাম সহ একাধিক সেটিংস ফাইলগুলি ব্যবহার করতে চান তবে আপনি এগুলি অ্যাপ / কনফিগারেশনের ভিতরে একটি উপ-ডিরেক্টরিতে রাখতে পারেন:

app/config/yettings/first.yml
app/config/yettings/second.yml

তারপরে আপনি এর মতো মানগুলি অ্যাক্সেস করতে পারবেন:

FirstYetting.your_setting
SecondYetting.your_setting

এটি আপনাকে ডিফল্ট সেটিংসও সরবরাহ করে যা প্রতি পরিবেশে ওভাররাইড করা যায়। আপনি yML ফাইলের মধ্যে erb ব্যবহার করতে পারেন।


অফিসিয়াল রেপোটি এখন এখানে রয়েছে: github.com/charlotte-ruby/yettings (এসও পর্যালোচক আমার সম্পাদনাটি খুব সামান্য বলে প্রত্যাখ্যান করেছেন)
লুলালালা

4

আমি সত্যি পছন্দ করি settingslogic মণি। সেট আপ করুন এবং ব্যবহার করা সহজ।

https://github.com/binarylogic/settingslogic


2
এ পর্যন্ত ভালবাসা। অ্যাপ্লিকেশন / মডেল / সেটিংস.আরবিতে আপনার সেটিংসের অবজেক্ট স্থাপন করা আপনাকে দেব মোডেও আবার লোড করে ing উইন!
মাদুর শ্যাফার

4

যদি আপনি হেরোকু ব্যবহার করেন বা অন্যথায় আপনার অ্যাপ্লিকেশন সেটিংসকে পরিবেশের ভেরিয়েবল হিসাবে রাখতে প্রয়োজন হয়, তবে ডুমুর রত্নটি খুব সহায়ক।


2

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


2
আমি অতিরিক্ত প্লাগইন ইত্যাদি ব্যবহার করতে চাই না, যেমন আমি রেল শিখছি, তাই করার সর্বোত্তম উপায়টি কোনও প্লাগইন ছাড়াই হবে।
শিব

নোট করুন এটি কনফিগারেশনগুলি সঞ্চয় করতে ডাটাবেস ব্যবহার করে, যা কিছু লোকের পক্ষে খুব বেশি ভারী হতে পারে।
লুলালালা

0

আমরা কিছু কাজ শুরু করে দিয়েছি তা হল অ্যাক্টিভসপোর্ট অর্ডার হ্যাশ

যা আপনাকে এনভায়রনমেন্ট ফাইলগুলির মধ্যে আপনার কনফিগারেশনটি পরিষ্কারভাবে সংজ্ঞায়িত করতে দেয় eg

config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']

-5

আমি আপনার অ্যাপ্লিকেশনটিতে কনফিগারেশনটি কীভাবে মোকাবেলা করতে হবে সে সম্পর্কে ভাল পদ্ধতির পরামর্শ দেব। তিনটি মূল নিয়ম রয়েছে:

  • আপনার কনফিগারেশন কোনও কোড পরিবর্তন করুন;
  • শর্তাবলী কনফিগারেশন ব্যবহার;
  • কোড লিখুন যা কিছু বোঝায়।

আরও বিস্তারিত ওভারভিউ দেখতে এই লিঙ্কটি অনুসরণ করুন: যথাযথ উপায়ে কলের কনফিগারেশন

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