Rails 3.0.7和Mongodb集成

时间:2011-06-12 23:24:37

标签: ruby-on-rails-3 mongodb mongomapper

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

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 / initializers:

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

但我仍然收到错误:

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)

有人可以帮忙吗?


更新

我删除了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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我在回答了一个不同的问题,然后在这个问题中将mongodb集成到另一个数据库之上:

How to configure MongoMapper and ActiveRecord in same Ruby Rails Project

您可以遵循该规则,并省略适用于ActiveRecord的部分。

答案 2 :(得分:0)

我最近写了一篇关于在mongodb上构建rails 3.0项目的文章。Rails 3.0 and mongoDB

希望这很有用..