Настройки приложений Rails?

Я работаю над приложением Rails, которое имеет аутентификацию пользователя, которая предоставляет учетную запись администратора. Внутри учетной записи администратора я сделал страницу для настроек sitewide.

Мне было интересно, какая норма предназначена для создания этих настроек. Скажем, например, я хотел бы, чтобы один из параметров изменил имя имени приложения или изменил цвет заголовка.

Я ищу, чтобы кто-то объяснил базовый процесс/метод - не обязательно конкретный код - хотя это было бы здорово!

Ответ 1

Для общей конфигурации приложения, которую не нужно хранить в таблице базы данных, мне нравится создавать файл config.yml в каталоге config. Для вашего примера это может выглядеть так:

defaults: &defaults
  app_title: My Awesome App
  header_colour: #fff

development:
  <<: *defaults

test:
  <<: *defaults
  app_title: My Awesome App (TEST ENV)

production:
  <<: *defaults

Этот файл конфигурации загружается из пользовательского инициализатора в config/initializers:

Rails 2.x:

APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]

Rails 3.x:

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

Затем вы можете получить значение с помощью:

title = APP_CONFIG['app_title']

Подробнее см. этот Railscast.

Ответ 2

Есть довольно хороший плагин/драгоценный камень Settingslogic.

  # app/config/application.yml
  defaults: &defaults
    cool:
      saweet: nested settings
    neat_setting: 24
    awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>

  development:
    <<: *defaults
    neat_setting: 800

  test:
    <<: *defaults

  production:
    <<: *defaults

Вы можете использовать эти настройки в любом месте, например, в модели:

  class Post < ActiveRecord::Base
    self.per_page = Settings.pagination.posts_per_page
  end