Ошибка при загрузке файлов конфигурации YAML в Rails - PullRequest
1 голос
/ 30 июня 2011

Я настраиваю Rails с MongoDB и нахожу странную проблему при обработке файла config/mongo.yml.

config/mongo.yml генерируется выполнением script/rails generate mongo_mapper:config и выглядит следующим образом:

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  <<: *defaults
  database: tc_web_development

test:
  <<: *defaults
  database: tc_web_test

Из файла конфигурации мы видим, что объекты development и test должны иметь оба поля database. Но когда он анализируется и загружается в config/initializers/mongo.db,

config = YAML::load(File.read(Rails.root.join('config/mongo.yml')))
puts config.inspect
MongoMapper.setup(config, Rails.env)

приходит странная вещь: вывод puts config.inspect равен

{"defaults"=>{"host"=>"127.0.0.1", "port"=>27017}, "development"=>{"host"=>"127.0.0.1", "port"=>27017}, "test"=>{"host"=>"127.0.0.1", "port"=>27017}}

, который не содержит атрибута database. Но когда я выполняю те же операторы в простой консоли ruby, вместо использования rails console, mongo.yml анализируется правильным образом.

{"defaults"=>{"host"=>"127.0.0.1", "port"=>27017}, "development"=>{"host"=>"127.0.0.1", "port"=>27017, "database"=>"tc_web_development"}, "test"=>{"host"=>"127.0.0.1", "port"=>27017, "database"=>"tc_web_test"}}

Мне интересно, что может быть причиной этой проблемы. Есть идеи? Спасибо.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

В зависимости от вашей системы Ruby может быть скомпилирован с поддержкой Psych, которая заменяет старый парсер Syck.Проблема, с которой вы столкнулись (которая связана только с использованием «сухого» файла yaml со значениями по умолчанию), уже исправлена ​​в Psych, но еще не выпущена в выпущенной версии Ruby.

На данный момент выможет заставить парсер YAML использовать Syck вместо Psych, поместив это в конец вашего boot.rb (но будьте осторожны - в будущей версии Ruby больше не будет Syck):

YAML::ENGINE.yamler = 'syck'

Иливы можете просто использовать не-DRY файл YAML (без значений по умолчанию).

1 голос
/ 30 июня 2011

На аналогичный вопрос уже был дан ответ здесь

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