Saya perlu membuat satu opsi konfigurasi untuk aplikasi Rails saya. Ini bisa sama untuk semua lingkungan. Saya menemukan bahwa jika saya mengaturnya environment.rb
, itu tersedia dalam pandangan saya, yang persis seperti yang saya inginkan ...
environment.rb
AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda
Bagus sekali.
Namun, saya sedikit gelisah. Apakah ini cara yang baik untuk melakukannya? Apakah ada cara yang lebih modern?
YAML::ENGINE.yamler = 'syck'
ini untuk bekerja stackoverflow.com/a/6140900/414220RAILS_ENV
denganRails.env
danRAILS_ROOT
denganRails.root
.Rails.application.config.whatever_you_want = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
Versi Rails 3 kode initialiser adalah sebagai berikut (RAILS_ROOT & RAILS_ENV tidak digunakan lagi)
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
Selain itu, Ruby 1.9.3 menggunakan Psikologi yang membuat menggabungkan huruf besar-kecil sehingga Anda perlu mengubah file konfigurasi Anda untuk memperhitungkannya, misalnya
sumber
"#{Rails.root.to_s}"
;"#{Rails.root}"
bekerja.Rails.root.join('config', 'config.yml')
daripada"#{Rails.root.to_s}/config/config.yml"
AppName::Application.config.custom
Rails> = 4.2
Hanya membuat
YAML
file keconfig/
direktori, misalnya:config/neo4j.yml
.Konten
neo4j.yml
dapat berupa sesuatu seperti di bawah ini (Untuk kesederhanaan, saya menggunakan default untuk semua lingkungan):di
config/application.rb
:Sekarang, konfigurasi khusus Anda dapat diakses seperti di bawah ini:
Info lebih lanjut
Dokumen API resmi Rails menjelaskan
config_for
metode sebagai:Jika Anda tidak ingin menggunakan
yaml
fileSeperti yang dikatakan panduan resmi Rails:
Contoh
Referensi Resmi untuk
config_for
metode | Panduan Rel Resmisumber
Langkah 1: Buat config / initializers / appconfig.rb
Langkah 2: Buat config / config.yml
Langkah 3: Dapatkan konstanta di mana saja dalam kode
sumber
Saya hanya ingin memperbarui ini untuk hal-hal keren terbaru di Rails 4.2 dan 5, sekarang Anda dapat melakukan ini di dalam salah satu
config/**/*.rb
file Anda :(dan itu literal
x
di sana, mis. yangconfig.x.
harfiah harus itu, dan kemudian Anda dapat menambahkan apa pun yang Anda inginkan setelahx
)... dan ini akan tersedia di aplikasi Anda sebagai:
Lihat lebih lanjut di sini: http://guides.rubyonrails.org/configuring.html#custom-configuration
sumber
x
.You can configure your own code through the Rails configuration object with custom configuration under either the config.x namespace, or config directly. The key difference between these two is that you should be using config.x if you are defining nested configuration (ex: config.x.nested.nested.hi), and just config for single level configuration (ex: config.hello).
Sumber: guides.rubyonrails.org/configuring.html#custom-configurationHanya beberapa info tambahan tentang topik ini:
".with_indifferent_access" memungkinkan Anda untuk mengakses nilai-nilai dalam hash menggunakan kunci string atau dengan kunci simbol yang setara.
misalnya.
APP_CONFIG['audiocast_uri_format'] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
Benar-benar hal yang mudah, tetapi saya lebih suka kunci saya direpresentasikan sebagai simbol.
sumber
Saya menggunakan sesuatu yang mirip dengan John for Rails 3.0 / 3.1, tapi saya harus parsing file terlebih dahulu:
Ini memungkinkan saya untuk menggunakan ERB dalam konfigurasi saya jika perlu, seperti membaca url redistogo heroku:
sumber
Rails 4
Untuk membuat yaml konfigurasi khusus dan memuatnya (dan membuatnya tersedia untuk aplikasi Anda) mirip dengan caranya
database_configuration
.Buat Anda
*.yml
, dalam kasus saya, saya memerlukan file konfigurasi redis.config/redis.yml
Kemudian muat konfigurasi
config/application.rb
Akses nilai-nilai:
Rails.configuration.redis_configuration[Rails.env]
mirip dengan bagaimana Anda dapat memiliki akses kedatabase.yml
oleh AndaRails.configuration.database_configuration[Rails.env]
sumber
Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml")[Rails.env]
. Namun dalam kereta 4.2 dan di atas jawaban smathy mungkin cara yang lebih mudah untuk pergi.Membangun solusi elegan Omer Aslam, saya memutuskan untuk mengubah kunci menjadi simbol. Satu-satunya perubahan adalah:
Ini memungkinkan Anda untuk kemudian merujuk nilai dengan simbol sebagai kunci, misalnya
Ini terlihat lebih rapi di mataku.
(Diposting sebagai jawaban karena reputasi saya tidak cukup tinggi untuk mengomentari balasan Omer)
sumber
Saya suka simpleconfig . Ini memungkinkan Anda untuk memiliki konfigurasi per lingkungan.
sumber
lihat tanggapan saya terhadap Di mana tempat terbaik untuk menyimpan parameter aplikasi: database, file, kode ...?
Variasi untuk apa yang Anda miliki sebagai referensi sederhana ke file lain. Ia melihat bahwa environment.rb tidak selalu diperbarui dan tidak memiliki banyak hal khusus aplikasi di dalamnya. Meskipun bukan jawaban spesifik untuk pertanyaan Anda tentang 'apakah itu jalan Rails?', Mungkin akan ada beberapa diskusi di sana tentang itu.
sumber
Saya lebih suka mengakses pengaturan melalui tumpukan aplikasi global. Saya menghindari kelebihan variabel global dalam lingkup lokal.
config / initializers / myconfig.rb
Dan akses dengan.
sumber
Cara saya memuat Pengaturan sebelum Rail diinisialisasi
Memungkinkan Anda menggunakan pengaturan dalam inisialisasi Rails dan mengonfigurasi pengaturan per lingkungan
Anda bisa mendapatkan pengaturan dengan dua cara: Pengaturan ['email'] atau Settings.email
sumber
Cara terbaik saya untuk konfigurasi kustom, dengan memunculkan pesan ketika setting.yml tidak ada.
akan dimuat dari penginisialisasi kustom di config / initializers / custom_config.rb
Buat YAML di config / setting.yml
sumber