使用Rails 3.2.2安装Mongoid

4

我将尝试在Rails 3.2.2中使用Mongoid,我已经添加了如下代码:

gem "mongoid", "~> 2.4"
gem "bson_ext", "~> 1.5"

添加到我的Gemfile中,运行:

bundle install

那么

rails g mongoid:config

然后编辑我的application.rb文件:

#require "active_record/railtie" commented because of mongoid
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"

我有一个mongoid.yml文件:

development:
  host: localhost
  database: boards_development

test:
  host: localhost
  database: boards_test

# set these environment variables on your prod server
production:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>
  # slaves:
  #   - host: slave1.local
  #     port: 27018
  #   - host: slave2.local
  #     port: 27019

我按照mongoid文档的提示删除了databse.yml文件,但在运行rails服务器时出现以下错误:

matteo@matteo-stable:~/Matteo/Dev/boards$ rails s
=> Booting WEBrick
=> Rails 3.2.2 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/railtie/configuration.rb:85:in `method_missing': undefined method `active_record' for #<Rails::Application::Configuration:0x8eb762c> (NoMethodError)
    from /home/matteo/Matteo/Dev/boards/config/environments/development.rb:26:in `block in <top (required)>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/railtie/configurable.rb:24:in `class_eval'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/railtie/configurable.rb:24:in `configure'
    from /home/matteo/Matteo/Dev/boards/config/environments/development.rb:1:in `<top (required)>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.2/lib/active_support/dependencies.rb:251:in `require'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/engine.rb:571:in `block in <class:Engine>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `instance_exec'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:30:in `run'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `each'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/initializable.rb:54:in `run_initializers'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/application.rb:136:in `initialize!'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /home/matteo/Matteo/Dev/boards/config/environment.rb:5:in `<top (required)>'
    from /home/matteo/Matteo/Dev/boards/config.ru:4:in `require'
    from /home/matteo/Matteo/Dev/boards/config.ru:4:in `block in <main>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /home/matteo/Matteo/Dev/boards/config.ru:1:in `new'
    from /home/matteo/Matteo/Dev/boards/config.ru:1:in `<main>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/commands/server.rb:46:in `app'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/commands/server.rb:70:in `start'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/commands.rb:55:in `block in <top (required)>'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/commands.rb:50:in `tap'
    from /home/matteo/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.2/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
matteo@matteo-stable:~/Matteo/Dev/boards$ rails s
=> Booting WEBrick
=> Rails 3.2.2 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
host is not a valid option for Mongo::Connection
[2012-03-16 20:00:08] INFO  WEBrick 1.3.1
[2012-03-16 20:00:08] INFO  ruby 1.9.3 (2012-02-16) [i686-linux]
[2012-03-16 20:00:08] INFO  WEBrick::HTTPServer#start: pid=9936 port=3000
^C[2012-03-16 20:01:03] INFO  going to shutdown ...
[2012-03-16 20:01:03] INFO  WEBrick::HTTPServer#start done.
Exiting

留下关于活动记录的那一行,我不会收到任何错误信息,但是会收到这个错误信息:
host is not a valid option for Mongo::Connection

我需要安装其他东西吗?

哦,不,它只是 StackOverflow。 - Matteo Pagliazzi
我遇到了类似的问题(除了主机问题)- 但是根据他们的文档,你不应该删除database.yml:“现在你有了mongoid.yml,你迫不及待地想要删除那个讨厌的database.yml,对吧?如果这样做,你将开始在各个地方收到ActiveRecord错误。” http://mongoid.org/docs/installation/configuration.html @pierre-louis-g 给出了正确的解决方法。我注释掉了提到active-record的两行代码,现在我的安装可以正常工作了。 - jbnunn
3个回答

6
你从应用程序中移除了 ActiveRecord,但仍然保留了其配置选项。请在 environment.rb 和 application.rb(以及 /config 下的其他文件)中查找 "active_record"。

5
尝试使用Rails模板来加快启动速度,它们将帮助您更快地开始,并很快添加许多其他非常有用的gem: https://github.com/RailsApps/rails3-application-templates 如果您想要设置一个不包含Active Record的Rails3项目,请使用以下命令,稍后在Gemfile中轻松添加Mongoid:
rails new appname --skip-active-record

3

你还需要对config/environments/development.rb中的代码行进行注释。

自Rails 3.2开始,他们在这个文件中添加了2行调用“active_record”的代码。只需将其注释即可。

  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :strict

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  config.active_record.auto_explain_threshold_in_seconds = 0.5

编辑:关于主机问题,很奇怪但答案是否定的,您不需要安装其他东西...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接