Saya bertanya-tanya bagaimana cara menambahkan variabel konfigurasi khusus ke aplikasi rel dan bagaimana mengaksesnya di controller, untuk misalnya saya ingin dapat mendefinisikan upload_directory dalam file konfigurasi mengatakan development.rb dan dapat mengaksesnya di salah satu dari saya pengendali.
Kedua saya berencana untuk memiliki dukungan S3 untuk unggahan dalam aplikasi saya, jika saya ingin menambahkan file yaml dengan akses s3, kunci rahasia, bagaimana cara menginisialisasi dalam Aplikasi Rails saya dan bagaimana cara mengakses nilai yang telah saya tetapkan dalam file konfigurasi itu.
ruby-on-rails
configuration
Pisau
sumber
sumber
Jawaban:
Perbarui 1
Sangat direkomendasikan: Saya akan menggunakan Rails Config gem saat ini untuk kontrol berbutainya
Pembaruan2
Jika Anda menginginkan solusi cepat, maka periksa jawaban Jack Pratt di bawah ini.
Meskipun jawaban asli saya di bawah masih berfungsi, jawaban ini sekarang sudah usang. Saya sarankan melihat pembaruan 1 dan 2.
Jawaban asli:
Untuk solusi cepat, menonton layar "File Konfigurasi YAML" yang dibuat oleh Ryan Bates akan sangat membantu.
Singkatnya:
sumber
RAILS_ENV
denganRails.env
danRAILS_ROOT
denganRails.root
.Dalam Rails 3, data konfigurasi khusus aplikasi dapat ditempatkan di objek konfigurasi aplikasi. Konfigurasi dapat ditetapkan dalam file inisialisasi atau file lingkungan - katakan untuk aplikasi yang diberikan
MyApp
:atau
Untuk membaca pengaturan, cukup panggil variabel konfigurasi tanpa menyetelnya:
MEMPERBARUI Rel 4
Di Rails 4 ada cara baru untuk ini => http://guides.rubyonrails.org/configuring.html#custom-configuration
sumber
config/environments/production.rb
Config:config.whatever = false
Akses di mana saja:Rails.configuration.whatever
undefined method
.Di Rails 3.0.5, pendekatan berikut ini bekerja untuk saya:
Di
config/environments/development.rb
, tulisNilai
custom_config_key
tersebut kemudian dapat dirujuk dari file lain menggunakansumber
undefined method
.method_missing': undefined method
store 'for # <Rails :: Application :: Configuration: 0x007f9f735772b7240> ...". Saya mencoba menambahkan variabel config "config.store.works".store
itu. Untuk menggunakan metode dalam jawaban ini, Anda dapat mengubah nama variabel Andastore_works
, atau membuatconfig.store
blok denganworks
didefinisikan di dalamnya.Ini bekerja di rel 3.1:
di config / environment.rb (atau di config / environment / .. untuk menargetkan lingkungan tertentu):
Ini akan dapat diakses di controller atau tampilan seperti ini:
(YourApp harus diganti dengan nama aplikasi Anda.)
Catatan : Ini kode Ruby, jadi jika Anda memiliki banyak kunci konfigurasi, Anda dapat melakukan ini:
di config / environment.rb:
sumber
Dalam Rails 4
Dengan asumsi Anda menempatkan variabel khusus Anda ke file yaml:
Buat penginisialisasi untuk memuatnya:
Sekarang di mana saja di aplikasi Anda, Anda dapat mengakses nilai-nilai ini seperti:
Lebih mudah
Rails.application.config_for :acme
untuk memuat Andaacme.yml
dan menggunakan lingkungan yang benar.sumber
Karena Rails 4.2, tanpa permata tambahan, Anda dapat memuat config / hi.yml hanya dengan menggunakan
Rails.application.config_for :hi
.Sebagai contoh:
touch config/passwords.yml
touch config/initializers/constants.rb
dan sekarang Anda dapat menggunakan
AUTHENTICATION
konstanta di mana saja di aplikasi Anda:kemudian tambahkan passwords.yml ke Gitignore :
echo /config/passwords.yml >> .gitignore
, membuat contoh file untuk kenyamanan Andacp /config/passwords.yml /config/passwords.example.yml
dan kemudian hanya mengedit file contoh Anda di konsol produksi Anda dengan nilai-nilai produksi yang sebenarnya.sumber
Saya hanya ingin memperbarui ini untuk hal-hal keren terbaru di Rails 4.2, sekarang Anda dapat melakukan ini di dalam salah satu
config/**/*.rb
file Anda :... dan ini akan tersedia di aplikasi Anda sebagai:
Lihat lebih lanjut di sini: http://guides.rubyonrails.org/configuring.html#custom-configuration
sumber
Lihat permata rapi ini melakukan hal itu: https://github.com/mislav/choices
Dengan cara ini data sensitif Anda tidak akan diekspos dalam proyek sumber terbuka
sumber
Saya membuat plugin sederhana untuk pengaturan YAML: Yettings
Ini bekerja dengan cara yang mirip dengan kode dalam jawaban khelll, tetapi Anda hanya perlu menambahkan file konfigurasi YAML ini:
Plugin secara dinamis membuat kelas yang memungkinkan Anda untuk mengakses pengaturan YML sebagai metode kelas di aplikasi Anda seperti:
Juga, jika Anda ingin menggunakan beberapa file pengaturan dengan nama unik, Anda dapat menempatkannya di subdirektori di dalam aplikasi / config seperti ini:
Kemudian Anda dapat mengakses nilai-nilai seperti ini:
Ini juga memberi Anda pengaturan default yang dapat diganti per lingkungan. Anda juga dapat menggunakan erb di dalam file yml.
sumber
Saya sangat suka permata pengaturanlogic . Sangat mudah diatur dan digunakan.
https://github.com/binarylogic/settingslogic
sumber
Jika Anda menggunakan Heroku atau perlu mempertahankan pengaturan aplikasi Anda sebagai variabel lingkungan, figaro gem sangat membantu.
sumber
Saya suka menggunakan rel-pengaturan untuk nilai konfigurasi global yang perlu diubah melalui antarmuka web.
sumber
Sesuatu yang kami mulai lakukan di tempat kerja adalah ActiveSupport Ordered Hash
Yang memungkinkan Anda untuk mendefinisikan konfigurasi Anda dengan bersih di dalam file lingkungan mis
sumber
Saya akan menyarankan pendekatan yang baik bagaimana menangani konfigurasi di aplikasi Anda sama sekali. Ada tiga aturan dasar:
Untuk mendapatkan gambaran umum yang lebih rinci, ikuti tautan ini: Konfigurasi rel dengan cara yang benar
sumber