2013-07-23 3 views
11

I followed the official tutorial.Не удается получить мангоидную работу с рельсами 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? Замена содержимого базы данных.yml на mongoid.yml, похоже, не делает трюк - я получаю

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

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

Редактировать: Я думаю, что я становлюсь теплее. Я добавил адаптер как «mongoid». Вот теперь это содержание моего database.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.

ответ

12

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

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

к config/intializers/mongoid.rb, согласно статье.

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

require 'rails/all' 

к (в 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" 
1

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

+1

Да, у меня есть. Однако, если я изменю его на mongoid, у меня есть файл конфигурации mongoid.yml и файл конфигурации database.yml, и я не уверен, как поменять местами два. –

+0

В конце учебника, которое вы связали, они говорили о том, как удалить database.yml, не так ли? – revolver

8

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

rails new app_name --skip-active-record 

добавления драгоценных камней, как описано выше, и получить мой mongoid.yml право ...

1

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

рельсов г MYAPP --skip-активной записи

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

0

В моем случае, я получал подобную ошибку приходя от пумы. Тогда я понял, что на конфигурации/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 с содержанием конфигурации/инициализаторах/Mongoid.rb

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

0

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

"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 = истина "в application.rb. Также убедитесь, что в database.yml база данных не указана в sqlite3, а mongoid. Вам также необходимо удалить «требует" рельсы/все»от application.rb и заменить его

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

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

Смежные вопросы