Почему я получаю сообщение об ошибке «db_name должно быть строкой или символом»?

Быстрая версия (для тех, кто знаком с Mongoid & Sinatra ) : Если это не , то Psyche / 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, все идет наперекосяк.

И что дает?

12
задан Dan Tao 13 August 2011 в 19:18
поделиться