Не удается получить mongoid, работая с Rails 4

Я следовал официальному учебнику.

У меня есть sqlite3, прокомментированный в моем Gemfile, а также следующие строки:

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

Однако я продолжаю получать Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem "sqlite3" to your Gemfile.

Похоже, причина в том, что database.yml по-прежнему перечисляет sqlite как базу данных. Как я могу заставить Rails использовать сгенерированный файл mongoid.yml? Замена содержимого database.yml на mongoid.yml, похоже, не делает трюк - я получаю

ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter ошибка.

Не совместим ли это с Rails 4 или я пропустил что-то простое?

Редактировать: Я думаю, что я становлюсь теплее. Я добавил адаптер как "mongoid". Здесь содержимое моей базы данных .yml теперь:

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

Выдает ошибку:

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.

Ответ 1

Я решил это, добавив:

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

до config/intializers/mongoid.rb, согласно учебнику.

Также вам нужно изменить следующую строку в файле config/application.rb:

require 'rails/all'

to (в 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+

или (в 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"

Ответ 2

У меня были похожие проблемы. Все было решено путем воссоздания моего приложения без ActiveRecord...

rails new app_name --skip-active-record

добавление Gems, как указано выше, и получение моего mongoid.yml права...

Ответ 3

Проверьте config/database.yml. Вероятно, вы указали sqlite3.

Ответ 4

Эта проблема возникает при использовании mongo. В основном монго не идет хорошо с активной записью. Итак, сгенерируйте приложение с помощью команды

rails g myApp --skip-active-record

Хорошо работает в моем случае

Ответ 5

В моем случае я получал аналогичную ошибку, исходящую от puma. Тогда я понял, что на config/puma.rb у меня было:

on_worker_boot do
  # worker specific setup
  ActiveSupport.on_load(:active_record) do
    config = ActiveRecord::Base.configurations[Rails.env] ||
        Rails.application.config.database_configuration[Rails.env]
    config['pool'] = ENV['MAX_THREADS'] || 16
    ActiveRecord::Base.establish_connection(config)
  end
end

Мне пришлось заменить все внутри on_worker_boot содержимым config/initializers/mongoid.rb

В общем, я считаю, что хорошим способом отладки является поиск любой ссылки на active_record на код.

Ответ 6

Я также получал ту же ошибку, что и

"Could not load active_record/connection_adapters/mongoid_adapter".

Я мог бы решить это, комментируя    "config.active_record.migration_error =: page_load" в файле deveopment.rb и    "config.active_record.raise_in_transactional_callbacks = true" в application.rb. Также убедитесь, что в database.yml база данных не указана в sqlite3, а mongoid. Вам также необходимо удалить "require" rails/all "из приложения .rb и заменить его на

require "action_controller/railtie"
require "action_mailer/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"

как указано в приведенных выше комментариях.