Мне было интересно, как добавить пользовательские переменные конфигурации в приложение rails и как получить к ним доступ в контроллере, например, я хочу иметь возможность определить upload_directory в файлах конфигурации, например, development.rb, и получить доступ к ним в одном из моих контроллеры.
Во-вторых, я планировал иметь поддержку S3 для загрузок в моем приложении, если я хотел добавить файл yaml с доступом к s3, секретным ключом, как мне инициализировать его в моем приложении Rails и как получить доступ к значениям, которые я определил в этом конфигурационном файле.
Ответы:
Обновление 1
Очень рекомендую: сейчас я собираюсь использовать Rails Config gem для тонкого контроля, который он обеспечивает.
Update2
Если вы хотите быстрое решение, то проверьте ответ Джека Пратта ниже.
Хотя мой оригинальный ответ ниже все еще работает, этот ответ устарел. Я рекомендую посмотреть на обновления 1 и 2.
Оригинальный ответ:
Для быстрого решения очень полезно посмотреть на экран «Файл конфигурации YAML», созданный Райаном Бейтсом.
В итоге:
источник
RAILS_ENV
наRails.env
иRAILS_ROOT
наRails.root
.В Rails 3 специальные пользовательские данные конфигурации приложения могут быть помещены в объект конфигурации приложения. Конфигурация может быть назначена в файлах инициализации или файлах среды - скажем, для данного приложения
MyApp
:или
Чтобы прочитать настройку, просто вызовите переменную конфигурации, не устанавливая ее:
ОБНОВЛЕНИЕ Rails 4
В Rails 4 появился новый способ для этого => http://guides.rubyonrails.org/configuring.html#custom-configuration
источник
config/environments/production.rb
Конфиг:config.whatever = false
Доступ к нему везде:Rails.configuration.whatever
undefined method
.В Rails 3.0.5 у меня работал следующий подход:
В
config/environments/development.rb
, напишиЗатем на значение
custom_config_key
можно ссылаться из других файлов, используяисточник
undefined method
.method_missing': undefined method
store" для # <Rails :: Application :: Configuration: 0x007f9f735b7240> ... ". Я пытался добавить конфигурационную переменную "config.store.works".store
такое. Чтобы использовать метод в этом ответе, вы можете либо переименовать вашу переменнуюstore_works
, либо создатьconfig.store
блок сworks
определенным в нем.Это работает в рельсах 3.1:
в config / environment.rb (или в config / средах / .. для определения конкретной среды):
Это будет доступно в контроллере или представлениях как это:
(Ваше приложение должно быть заменено именем вашего приложения.)
Примечание : это код Ruby, поэтому, если у вас много ключей конфигурации, вы можете сделать это:
в config / environment.rb:
источник
В Rails 4
Предполагая, что вы поместили свои пользовательские переменные в файл yaml:
Создайте инициализатор для их загрузки:
Теперь в любом месте вашего приложения вы можете получить доступ к этим значениям следующим образом:
Это удобно для того,
Rails.application.config_for :acme
чтобы загрузитьacme.yml
и использовать правильную среду.источник
Начиная с Rails 4.2, без дополнительных гемов, вы можете загрузить config / hi.yml просто используя
Rails.application.config_for :hi
.Например:
touch config/passwords.yml
touch config/initializers/constants.rb
и теперь вы можете использовать
AUTHENTICATION
константу везде в вашем приложении:затем добавьте passwords.yml в .gitignore :,
echo /config/passwords.yml >> .gitignore
создайте файл примера для вашего удобстваcp /config/passwords.yml /config/passwords.example.yml
и затем просто отредактируйте файл примера в рабочей консоли с фактическими производственными значениями.источник
Я просто хотел обновить это для последней крутой вещи в Rails 4.2, теперь вы можете сделать это внутри любого из ваших
config/**/*.rb
файлов:... и это будет доступно в вашем приложении как:
Подробнее здесь: http://guides.rubyonrails.org/configuring.html#custom-configuration
источник
Проверьте этот аккуратный драгоценный камень, делающий именно это: https://github.com/mislav/choices
Таким образом, ваши конфиденциальные данные не будут представлены в проектах с открытым исходным кодом.
источник
Я создал простой плагин для настроек YAML: Йеттингс
Он работает аналогично коду в ответе khelll, но вам нужно только добавить этот файл конфигурации YAML:
Плагин динамически создает класс, который позволяет вам получить доступ к настройкам YML как методы класса в вашем приложении, например, так:
Кроме того, если вы хотите использовать несколько файлов настроек с уникальными именами, вы можете поместить их в подкаталог в app / config следующим образом:
Затем вы можете получить доступ к значениям, как это:
Он также предоставляет вам настройки по умолчанию, которые могут быть переопределены для каждой среды. Вы также можете использовать erb внутри файла yml.
источник
Мне очень нравится настройка логического драгоценного камня. Очень прост в настройке и использовании.
https://github.com/binarylogic/settingslogic
источник
Если вы используете Heroku или иным образом хотите сохранить настройки приложения в качестве переменных среды, драгоценность figaro очень полезна.
источник
Мне нравится использовать rails-settings для глобальных значений конфигурации, которые нужно менять через веб-интерфейс.
источник
То, что мы начинаем делать на работе, это ActiveSupport Ordered Hash
Что позволяет вам четко определить вашу конфигурацию в файлах среды, например
источник
Я бы предложил хороший подход к настройке вашего приложения. Есть три основных правила:
Чтобы получить более подробный обзор, перейдите по этой ссылке: Правильно сконфигурируйте Rails
источник