Быстрая версия (для тех, кто знаком с Mongoid и Sinatra). Если это не Psyche/Syck Проблема синтаксического анализа YAML, почему еще я могу получить эту ошибку при попытке подключиться к базе данных 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, что все идет не так.
Итак, что дает?