Подтвердить что ты не робот

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

Быстрая версия (для тех, кто знаком с 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, что все идет не так.

Итак, что дает?

4b9b3361

Ответ 1

Убедитесь, что ENV['RACK_ENV'] установлен правильно, так как это используется Mongoid.load!, если он не находит Rails.env.

Ответ 2

У меня была та же проблема с рельсами и решена так:

Проблема заключается в разных ожиданиях монгоидских и монгобских логгеров относительно структуры мангоида. Короткие: просто добавьте базу данных на верхнем уровне:

development:
  sessions:
    default:
      database: apollo_development                       <<<< for the rest
      hosts:
        - localhost:27017
      options:
        consistency: :strong
  database: apollo_development                           <<<<main level for logger
    .... more stuff for the logger

Преимущество состоит в том, что вы можете использовать базу данных для своих данных, а другую для регистратора. Технически существуют две независимые системы, использующие yml: logger и MongoId.