Гибкое конфигурирование приложения на Ruby on Rails

Oct 14
2006 06:27 (Ruby on Rails) · English (15,452 views)

В моем текущем проекте на Ruby on Rails нужно хранить конфигурацию приложения. Я нашел несколько подходов к решению этой задачи: плагин AppConfig, несколько методов, описанных на странице Wiki HowtoAddYourOwnConfigInfo, но ни один из них не выглядит “похожим на конфигурационный файл”. Мы с другом, Алексеем Ковыриным, исследовали все, и решили использовать YAML-файл. Идеальной конфигурацией, как мне кажется, является следующий файл:

1
2
3
4
5
6
7
8
9
10
11
span class="re0"> common:
 support_email: admin@myhost.com
 root_url: myhost.com
 photos_max_number: 6

production:
 email_exceptions: true

development:
 root_url: localhost:3000
 photos_max_number: 10

В этом примере можно увидеть три раздела: common используется как базовая конфигурация для всех окружений, production и development - настройки, специфичные для окружения. Возможными разделами являются production, development и testing, а также любые другие пользовательские имена окружений. Я разместил этот файл в config/config.yml и добавил следующий код в config/environment.rb:

1
2
3
4
5
6
7
require 'ostruct'
require 'yaml'

config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)

Теперь я могу использовать конструкции вида AppConfig.support_email и AppConfig.root_url. Похоже на то, что мои конфигурационные файлы соответствуют принципу DRY, насколько это возможно :-)

Zend Framework: размышления о Zend_Config

Mar 10
2006 10:48 (PHP) · English (15,863 views)

В почтовой рассылке Zend Framework кипит обсуждение класса Zend_Config. У меня есть свои идеи об этом классе, и я попытаюсь изложить их здесь. Мне необходимо нечто, что сможет загружать и сохранять конфигурацию в разные хранилища (например, XML, базы данных или текстовые файлы INI), важно иметь возможность изменять параметры хранилища (например, имя файла, таблицы или даже структуру базы данных), было бы замечательно, если бы я мог расширять систему хранения своими собственными стратегиями.

Читать дальше »

 
Copyright © 2005 - 2008, Dmytro Shteflyuk