Как определить настраиваемые переменные конфигурации в рельсах
Мне было интересно, как добавить настраиваемые переменные конфигурации в приложение rails и как получить к ним доступ в контроллере, например, я хочу иметь возможность определять файл upload_directory в файлах конфигурации, сообщает development.rb и иметь доступ к нему в один из моих контроллеров.
Во-вторых, я планировал иметь поддержку S3 для загрузки в моем приложении, если бы я хотел добавить файл yaml с секретным ключом s3, как его инициализировать в моем приложении Rails и как получить доступ к значениям, которые Я определил в этом файле конфигурации.
Ответы
Ответ 1
Обновление 1
Очень рекомендуется: я собираюсь с Rails Config gem в настоящее время для мелкозернистого элемента управления, который он предоставляет.
Update2
Если вам нужно быстрое решение, а затем проверьте ответ Джека Пратт ниже.
Хотя мой первоначальный ответ ниже все еще работает, этот ответ устарел. Я рекомендую посмотреть обновления 1 и 2.
Оригинальный ответ:
Для быстрого решения, просмотр файла конфигурации YAML сделанного Райаном Бейтсом, должен быть очень полезным.
Вкратце:
# 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
Ответ 2
В Rails 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
UPDATE Rails 4
В Rails 4 есть новый способ для этого = > http://guides.rubyonrails.org/configuring.html#custom-configuration
![enter image description here]()
Ответ 3
В Rails 3.0.5 для меня работал следующий подход:
В config/environments/development.rb
напишите
config.custom_config_key = :config_value
Затем значение custom_config_key
может ссылаться на другие файлы с помощью
Rails.application.config.custom_config_key
Ответ 4
Это работает в рельсах 3.1:
в config/environment.rb(или в config/environment/.. для целевой среды):
YourApp::Application.config.yourKey = 'foo'
Это будет доступно в контроллере или в виде:
YourApp::Application.config.yourKey
(YourApp следует заменить на ваше имя приложения.)
Примечание. Это код Ruby, поэтому, если у вас много ключей конфигурации, вы можете сделать это:
в config/environment.rb:
YourApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
Ответ 5
В Rails 4
Предполагая, что вы помещаете свои пользовательские переменные в файл yaml:
# 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
и использует правильную среду.
Ответ 6
Так как Rails 4.2 без дополнительных драгоценных камней вы можете загрузить config/hi.yml, просто используя Rails.application.config_for :hi
.
Например:
-
touch config/initializers/constants.rb
#config/initializers/constants.rb
AUTHENTICATION = Rails.application.config_for :passwords
-
и теперь вы можете использовать константу AUTHENICATION
всюду в своем приложении:
#rails c production
:001> AUTHENTICATION['username'] => 'aa'
-
затем добавьте passwords.yml в .gitignore: echo /config/passwords.yml >> .gitignore
, создайте файл примера для вашего комфорта cp /config/passwords.yml /config/passwords.example.yml
, а затем просто отредактируйте файл примера в вашей рабочей консоли с фактическими производственными значениями.
Ответ 7
Я просто хотел обновить это для последних интересных вещей в Rails 4.2, теперь вы можете сделать это в любом из ваших файлов config/**/*.rb
:
config.x.whatever.you.want = 42
... и это будет доступно в вашем приложении как:
Rails.configuration.x.whatever.you.want
Подробнее здесь: http://guides.rubyonrails.org/configuring.html#custom-configuration
Ответ 8
Отметьте этот аккуратный камень, который делает именно это:
https://github.com/mislav/choices
Таким образом, ваши конфиденциальные данные не будут отображаться в проектах с открытым исходным кодом.
Ответ 9
Я создал простой плагин для настроек YAML: Yettings
Он работает аналогично коду в ответе khelll, но вам нужно только добавить этот файл конфигурации YAML:
app/config/yetting.yml
Плагин динамически создает класс, который позволяет вам получить доступ к настройкам YML в качестве методов класса в вашем приложении, например:
Yetting.your_setting
Кроме того, если вы хотите использовать несколько файлов настроек с уникальными именами, вы можете поместить их в подкаталог внутри app/config следующим образом:
app/config/yettings/first.yml
app/config/yettings/second.yml
Затем вы можете получить доступ к следующим значениям:
FirstYetting.your_setting
SecondYetting.your_setting
Он также предоставляет вам настройки по умолчанию, которые можно переопределить для каждой среды. Вы также можете использовать erb внутри файла yml.
Ответ 10
Мне очень нравится settingslogic gem. Очень легко настроить и использовать.
https://github.com/binarylogic/settingslogic
Ответ 11
Если вы используете Heroku или иным образом должны сохранять свои настройки приложения в качестве переменных среды, figaro драгоценный камень очень полезен.
Ответ 12
Мне нравится использовать rails-settings для глобальных значений конфигурации, которые необходимо изменить с помощью веб-интерфейса.
Ответ 13
Я хотел бы предложить хороший подход, как вообще иметь дело с конфигурацией в вашем приложении. Существует три основных правила:
- измените конфигурацию, а не код;
- использовать конфигурации по условиям;
- написать код, что-то значит.
Чтобы получить более подробный обзор, перейдите по этой ссылке: Правильно отредактируйте конфигурацию