2013-07-23 10 views
11

I followed the official tutorial.Mongoid funktioniert nicht mit Rails 4

Ich habe sqlite3 in meinem Gemfile sowie die folgenden Zeilen auf Kommentar:

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

aber ich halte Empfang der Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem "sqlite3" to your Gemfile.

Grund, dass die database.yml noch SQLite Listen zu sein scheint als die Datenbank. Wie soll ich Rails dazu bringen, das generierte mongoid.yml zu verwenden? database.yml Inhalt mit mongoid.yml Ersetzen scheint nicht den Trick zu tun - ich bekomme die

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

Ist es nicht kompatibel mit Rails 4 oder fehlt mir etwas einfaches?

Edit: Ich denke, ich werde wärmer. Ich habe den Adapter als 'Mongoid' hinzugefügt. Hier ist der Inhalt meiner database.yml jetzt:

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 

Erzeugt den Fehler:

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.

Antwort

12

Ich habe dies durch Zugabe gelöst:

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

zu config/intializers/mongoid.rb, gemäß der Anleitung.

Auch müssen Sie aus der folgenden Zeile in config/application.rb Datei ändern:

require 'rails/all' 

zu (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+ 

oder (in Schienen 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

Ihre config/database.yml prüfen. Sie haben dort wahrscheinlich sqlite3 angegeben.

+1

Ja, ich habe. Allerdings, wenn ich es zu Mongoid ändere, habe ich eine ganze mongoid.yml Konfigurationsdatei und eine Datenbank.yml Konfigurationsdatei und ich bin mir nicht sicher, wie man die zwei –

+0

Am Ende des Tutorials, das Sie verknüpften, sprachen sie darüber, wie Datenbank.yml zu entfernen, nicht wahr? – revolver

8

Ich hatte ähnliche Probleme. Alles wurde durch Neuer meine app ohne Active aufgelöst ...

rails new app_name --skip-active-record 

Hinzufügen Gems wie oben und mein mongoid.yml richtig hinzubekommen ...

1

Dieses Problem tritt auf, wenn Mongo verwenden. Im Grunde geht Mongo nicht gut mit aktiver Aufnahme. So Ihre Anwendung generieren mit dem Befehl,

Schienen g myApp --skip-aktiv-Rekord

funktioniert gut in meinem Fall

0

In meinem Fall, ich war die Aufnahme eines ähnlichen Fehlers von Puma kommt. Ich erkannte, dass dann auf config/puma.rb Ich hatte:

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 

ich alles in on_worker_boot mit dem Inhalt der config/initializers/mongoid zu ersetzen hatte.rb

Im Allgemeinen, ich denke, eine gute Möglichkeit zur Fehlersuche ist die Suche nach einem Verweis auf active_record auf den Code.

0

Ich wurde auch als

"Could not load active_record/connection_adapters/mongoid_adapter". 

den gleichen Fehler konnte ich es lösen, indem sie zu kommentieren "config.active_record.migration_error =: page_load" in deveopment.rb und „config.active_record.raise_in_transactional_callbacks = true "in der Anwendung.rb. Stellen Sie außerdem sicher, dass in Datenbank.yml die Datenbank nicht unter sqlite3, sondern mongoid angegeben ist. Sie müssen auch „require‚Schienen/all‘“ von application.rb entfernen und ersetzen sie durch

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

wie in obigen Ausführungen erwähnt.

Verwandte Themen