Где я должен хранить настройки конфигурации сайта для приложения Rails? - PullRequest
5 голосов
/ 21 августа 2010

У меня есть приложение rails, и из раздела администратора сайта я хотел бы иметь возможность включать / отключать определенные параметры, такие как показ объявлений или встраивание кода отслеживания Google Analytics.

Есть ли лучшая практика для этого в Rails? Одной мыслью было создание таблицы настроек и сохранение в ней значений.

Ответы [ 4 ]

3 голосов
/ 22 августа 2010

Если вы не собираетесь настраивать во время выполнения, вы можете использовать что-то вроде генератора rfates 'nifty-config: http://github.com/ryanb/nifty-generators

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

require 'ostruct'

raw_config = File.read(Rails.root + "config/gateway_config.yml")
GATEWAY_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys

#allow dot notation access
GatewayConfig = OpenStruct.new(GATEWAY_CONFIG)

Затем, чтобы получить настройку из вашего конфигурационного файла, вы вызовете что-то вроде

GatewayConfig.username

Другим вариантом является конфигурационный гем , который дает вам аналогичное использование точечной нотации, но также имеет более продвинутые опции, такие как установка значений по умолчанию, и файл конфигурации - это Ruby вместо YAML.

1 голос
/ 22 августа 2010

Я бы сохранил эту информацию в базе данных, если у вас нет доступа к ней.Если у вас нет доступа к базе данных, вы можете сохранить файл в папке конфигурации.

Вот пример кода контроллера для чтения и записи в файл конфигурации.

def featured_specials
  @featured_specials = YAML::load_file("#{RAILS_ROOT}/config/featured_specials.yml")
end

def save_featured_specials
  config_file = "#{RAILS_ROOT}/config/featured_specials.yml"
  File.new(config_file, "w") unless File.exist?(config_file)
  File.open(config_file, "w") do |f|
    f.write(params['formvars'].to_yaml)
  end
  flash[:notice] = 'Featured Specials have been saved.'
  redirect_to :action => 'featured_specials'
end

ПРИМЕЧАНИЕ: этот код может быть немного очищен, но должен служить достойным примером.

0 голосов
/ 27 августа 2010

Я уже проголосовал за другой ответ, но для быстрого и грязного способа вы можете удалить переменную класса в environment.rb после блока кода инициализатора.

0 голосов
/ 21 августа 2010

Вы можете сохранить свою конфигурацию в каталоге config/.Я знаю несколько приложений, которые хранят свои конфиги в этом каталоге.(например, teambox.yml в Teambox ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...