2011-06-12 61 views
2

我想用mongodb在rails中创建我的第一个web应用程序,但是我正在遇到一些正确集成的麻烦。首先,这里是我的database.yml文件:Rails 3.0.7和Mongodb集成

development: 
    adapter: mongodb 
    database: mongo_development 
    host: localhost 

test: 
    adapter: mongodb 
    database: mongo_test 
    host: localhost 

production: 
    adapter: mongodb 
    database: mongo_production 
    host: localhost 

在几个教程之一,我看到了一个ActiveRecord的模型等效 - MongoMapper。例如我的用户模型:

class User 
    include MongoMapper::Document 

    key :name, String 
    key :age, Integer 

    many :books 
end 

我还添加了mongodb.rb到config /初始化:

db_config = YAML::load(File.read(RAILS_ROOT + "/config/database.yml")) 

if db_config[Rails.env] && 
    db_config[Rails.env]['adapter'] == 'mongodb' 
    mongo = db_config[Rails.env] 
    MongoMapper.connection = Mongo::Connection.new(mongo['hostname']) 
    MongoMapper.database = mongo['database'] 
end 

我创建控制器为用户:

class UsersController < ApplicationController 

    def index 
    user = User.new(:name => 'Brandon') 
    user.books.build(:name => 'Programming', :started => 10.years.ago) 
    user.save! 
    puts User.where(:name => 'Brandon').first  
    end 
end 

但我m仍然出现错误:

Please install the mongodb adapter: `gem install activerecord-mongodb-adapter` (no such file to load -- active_record/connection_adapters/mongodb_adapter) 

我已安装宝石:

abstract (1.0.0) 
actionmailer (3.0.7) 
actionpack (3.0.7) 
activemodel (3.0.7) 
activerecord (3.0.7) 
activeresource (3.0.7) 
activesupport (3.0.8, 3.0.7) 
.... 
mongo (1.3.1) 
mongo_mapper (0.9.1) 
rails (3.0.7) 
railties (3.0.7) 
rake (0.9.2) 
rubygems-update (1.8.5) 

任何人都可以帮忙吗?


UPDATE

我删除mongodb.rb初始化,database.yml的和使用rails g mongo_mapper:config。它创建的文件mongo.yml:

defaults: &defaults 
    host: 127.0.0.1 
    port: 27017 

development: 
    <<: *defaults 
    database: mongo_db_app_development 

test: 
    <<: *defaults 
    database: mongo_db_app_tests 

# set these environment variables on your prod server 
production: 
    <<: *defaults 
    database: mongo_db_app 
    username: <%= ENV['MONGO_USERNAME'] %> 
    password: <%= ENV['MONGO_PASSWORD'] %> 

但我得到的错误:No such file or directory - /home/adm/NetBeansProjects/MongoDBApp/config/database.yml

所以我复制了mongo.yml文件的内容到database.yml,我得到了错误:

ActiveRecord::AdapterNotSpecified database configuration does not specify adapter

回答

3

MongoMapper是ActiveRecord的完整替代品 - 它不仅仅是一个适配器。

运行rails g mongo_mapper:config并且这将为MongoMapper创建一个mongo.yml配置文件,并且您不需要mongodb.rb初始化程序。此外,您必须从database.yml中删除adapter: mongodb,否则ActiveRecord将继续寻找不存在的mongodb适配器。