Быстрая версия (для тех, кто знаком с Монгоид & Синатра ) : если это не Психея / Syck Проблема с YAML-анализом, почему else может появиться эта ошибка при попытке подключения к базе данных MongoDB с использованием Mongoid? (Или, может быть, является этой проблемой, в таком случае, как мне исправить мой файл mongoid.yml, опубликованный ниже?)
Более подробная (оригинальная) версия :
У меня есть приложение Sinatra, взаимодействующее с базой данных MongoDB через Mongoid:
configure do
Mongoid.load!('config/mongoid.yml')
end
И мой файл mongoid.yml выглядит так:
development:
host: localhost
database: project_development
test:
host: localhost
database: project_test
production:
uri: <%= ENV['MONGOLAB_URI'] %>
Всякий раз, когда я пытаюсь каким-либо образом взаимодействовать с базой данных, я получаю ошибку db_name должно быть строкой или символом .
Теперь я нашел много информации в Google по этому поводу; но все, что я могу найти, указывает на то, что проблема связана с тем, что Ruby теперь использует синтаксический анализатор Psyche YAML вместо старого синтаксического анализатора Syck. Я не думаю, что это действительно уместно в моем случае, потому что, насколько я могу судить, вышеупомянутый YAML должен быть идеально разбираемым любым из них.
(Впрочем, что бы это ни стоило, я уже пытался использовать трюк YAML::ENGINE.yamler= 'syck'
, но безрезультатно. Я получил точно такое же сообщение об ошибке.)
Когда я изменяю конфигурацию на это:
Mongoid.configure do |config|
name = "project_development"
host = "localhost"
config.master = Mongo::Connection.new.db(name)
end
... тогда все работает нормально. Итак, я знаю, что MongoDB работает на моей машине. Именно когда я использую файл YAML, все идет не так, как надо.
Так что же дает?