Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't get mongoid working with Rails 4

I followed the official tutorial.

I have sqlite3 commented out in my Gemfile as well as the following lines:

gem 'mongoid', '~> 4', github: 'mongoid/mongoid'
gem 'bson_ext'

However, I keep receiving the Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem "sqlite3" to your Gemfile.

Reason seems to be that the database.yml still lists sqlite as the database. How am I supposed to get Rails to use the generated mongoid.yml? Replacing database.yml's contents with mongoid.yml doesn't seem to do the trick - I get the

ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter error.

Is it not compatible with Rails 4 or am I missing something simple?

Edit: I think I'm getting warmer. I've added the adapter as 'mongoid'. Here's the contents of my database.yml now:

development:
  adapter: 'mongoid'
  # Configure available database sessions. (required)
  sessions:
    # Defines the default session. (required)
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      database: xboxie
      # Provides the hosts the default session can connect to. Must be an array
      # of host:port pairs. (required)
      hosts:
        - localhost:27017
      options:
        # Change whether the session persists in safe mode by default.
        # (default: false)
        # safe: false

        # Change the default consistency model to :eventual or :strong.
        # :eventual will send reads to secondaries, :strong sends everything
        # to master. (default: :eventual)
        # consistency: :eventual

        # How many times Moped should attempt to retry an operation after
        # failure. (default: 30)
        # max_retries: 30

        # The time in seconds that Moped should wait before retrying an
        # operation on failure. (default: 1)
        # retry_interval: 1
  # Configure Mongoid specific options. (optional)
  options:
    #
test:
  sessions:
    default:
      database: xboxie_test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        # In the test environment we lower the retries and retry interval to
        # low amounts for fast failures.
        max_retries: 1
        retry_interval: 0


# # SQLite version 3.x
# #   gem install sqlite3
# #
# #   Ensure the SQLite 3 gem is defined in your Gemfile
# #   gem 'sqlite3'
# development:
#   adapter: sqlite3
#   database: db/development.sqlite3
#   pool: 5
#   timeout: 5000

# # Warning: The database defined as "test" will be erased and
# # re-generated from your development database when you run "rake".
# # Do not set this db to the same as development or production.
# test:
#   adapter: sqlite3
#   database: db/test.sqlite3
#   pool: 5
#   timeout: 5000

# production:
#   adapter: sqlite3
#   database: db/production.sqlite3
#   pool: 5
#   timeout: 5000

Produces the error:

LoadError: Could not load 'active_record/connection_adapters/mongoid_adapter'. Make sure that the adapter in config/database.yml is valid. If you use an adapter other than 'mysql', 'mysql2', 'postgresql' or 'sqlite3' add the necessary adapter gem to the Gemfile.

like image 542
dsp_099 Avatar asked Jul 23 '13 01:07

dsp_099


1 Answers

I've solved this by adding:

Mongoid.load!(Rails.root.join("/config/mongoid.yml"))

to config/intializers/mongoid.rb, as per the tutorial.

Also you'll need to change the following line in your config/application.rb file from:

require 'rails/all'

to (in Rails 3.x):

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"
# require "sprockets/railtie" # Uncomment this line for Rails 3.1+

or (in Rails 4.x):

# Pick the frameworks you want:
# require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
like image 116
dsp_099 Avatar answered Oct 12 '22 01:10

dsp_099