30 May, 2010

If you are working with Rails 3 and Mongoid, you’re likely to upgrade to mongoid-2.0.0.beta6. That’s okay, but you will run into a few problems. Among others, one will be:

Database should be a Mongo::DB, not NilClass

or

Mongoid::Errors::InvalidDatabase: Mongoid::Errors::InvalidDatabase

Another, Mongoid-related problem is the error uninitialized constant OrderedHash.

Luckily, these problems can be solved quite easily.

The first thing you need to do is make sure you use the right version of bson_ext. Beta 6 requires you to run bson_ext-1.0.1 or you’ll get the OrderedHash error. Okay, with that out of the way, let’s focus on the MongoDB errors.

The problem is that Mongoid is accessed/used before it is properly initialized. To resolve this issue, add the following line to your other requires at the top of config/application.rb.

require 'mongoid/railtie'

With that, you initialize Mongoid correctly. Hope it helps.

Update: I also ran into keys must be strings or symbols errors. This is now a known issue with mongoid-2.0.0.beta6 and has been fixed in master. If you are using Bundler (you are, aren’t you?) then you can use the master branch instead of the gem:

# gem 'mongoid', '2.0.0.beta6'
gem 'mongoid', :git => 'http://github.com/durran/mongoid.git'