Как использовать YAML рельсовым способом? - PullRequest
1 голос
/ 11 июля 2011

Я использую YAML для конфигурации в моем приложении.Я использую configatron для общей конфигурации.Однако у меня есть личные значения конфигурации (account_id и пароль).

Я мог бы создать модель в базе данных или создать новую строку в моей модели Setting.Однако я предпочитаю сохранять информацию о yml

. Я создаю my.yml в конфигурации и затем читаю на контроллере

yaml_config = YAML::load(ERB.new(IO.read(File.join(RAILS_ROOT, 'config', 'my.yml'))).result)[RAILS_ENV]

Так что я хочу использовать файл my.yml, как это делает gem configuratron.

т.е. я фактически загружаю YAML в строке, и я хочу настроить my.field_information.

, если я выражаю плохое извините меня

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Я не уверен, правильно ли я вас понял, но вы хотите иметь доступ к своей конфигурации с атрибутами?

Тогда вы можете сделать что-то вроде этого:

class My
    def initialize
        @config = YAML::load(ERB.new(IO.read( 
                  File.join(RAILS_ROOT, 'config', 'my.yml'))).result)[RAILS_ENV]
    end

    def method_missing(name, *args, &block)
        @config[name.to_s]
    end
end

это позволит вам получить доступ к полям верхнего уровня в качестве атрибутов.

например, если ваш файл my.yml выглядит как

development:
    user: Me
    password: Mine

Тогда вы можете получить к нему доступ

my_config = My.new
my_config.user
my_config.password    

Конечно, это только грубый пример. Вы должны добавить много проверок и обработку ошибок, если в файле отсутствуют какие-либо атрибуты и т. Д.

0 голосов
/ 12 июля 2011

Я только что написал что-то актуальное за последние 5 минут (включая проверки, если yml отсутствует / недействителен):

mg_yml = YAML::load(File.open("#{RAILS_ROOT}/config/yyy.yml"))
if mg_yml
  mg_yml_env = mg_yml.with_indifferent_access[RAILS_ENV]
  if mg_yml_env
    if mg_yml_env.with_indifferent_access[:password].blank?
      flash[:error] = "<em>config/yyy.yml</em> missing password (blank / missing) for current environment.  You cannot access yyy until you set the password for this environment."
    else
      @password_from_yml = mg_yml_env.with_indifferent_access[:password]
    end
  else
    flash[:error] = "<em>config/yyy.yml</em> missing password for current environment '#{RAILS_ENV}'.  You cannot access yyy until you configure this file for this environment."
  end
else
  flash[:error] = "<em>config/yyy.yml</em> missing.  You cannot access yyy until you configure this file."
end

Для yyy.yml в каталоге / config:

development:
  password: my_dev_pass
test:
  password: my_test_pass
production:
  password: my_production_pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...