0

我尝试在一个项目中安装 rspec 和 mongoid(按照“Rails Deep Dive”一书中的示例),当我尝试从 RSpec 运行生成器时出现错误。

这是gemfile:

gem 'rails', '3.2.11'
gem 'devise', "~> 1.4.2"
gem 'mongoid', "~> 2.1.8"
gem 'mongoid_spacial', '~> 0.2.13'
gem 'haml', '~> 3.1.2'
gem 'bson_ext', '~> 1.3.1'
gem 'rails-backbone'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
group :test, :development do
  gem 'rspec-rails', '~> 2.6.1'
  gem 'mongoid-rspec', '~> 1.4.4'
  gem 'capybara', '~> 1.0.1'
  gem 'factory_girl_rails', '~> 1.1.0'
  gem 'database_cleaner', '~> 0.6.7'
  gem 'jasmine', '~> 1.0.2.1'
end

我使用生成器生成了一个 mongo 配置文件,结果如下:

development:
  host: localhost
  database: loccasions_development

test:
  host: localhost
  database: loccasions_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'] %>

我可以确认 MongoDB 已启动并正在运行,我可以访问 Web 浏览器界面。但是现在,当我运行时,出现rails g rspec:install以下错误:

NOTE: Gem.available? is deprecated, use Specification::find_by_name. It will be removed on or after 2011-11-01.
Gem.available? called from /home/glenn/.rvm/gems/ruby-1.9.3-p362/gems/jasmine-1.0.2.1/lib/jasmine/base.rb:64.
host is not a valid option for Mongo::MongoClient
/home/glenn/.rvm/gems/ruby-1.9.3-p362/gems/bson-1.8.2/lib/bson/bson_c.rb:24:in `serialize': wrong number of arguments(4 for 3) (ArgumentError)

我怎样才能解决这个问题?

4

2 回答 2

0

我有同样的问题。我对下面给出的所有 gem 使用了 HEAD 并添加了 mongo_ext (但我认为它没有改变任何东西):

source 'https://rubygems.org'

gem 'rails'
gem 'devise'
gem 'mongoid'
gem 'mongoid_spacial'
gem 'haml'
gem 'bson_ext'
gem 'mongo_ext'
gem 'rails-backbone'

group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'uglifier'
end

gem 'jquery-rails'

group :test, :development do
  gem 'rspec-rails'
  gem 'mongoid-rspec'
  gem 'capybara'
  gem 'factory_girl_rails'
  gem 'database_cleaner'
  gem 'jasmine'
end

我重新运行 mongoid 生成器

rails g mongoid:config

为了重新创建一个正确的 mongoid.yml 然后是 rspec 安装程序

rails g rspec:install

就这样。我使用的宝石版本是:

bson_ext (1.8.2)
  bson (~> 1.8.2)

mongo_ext (0.19.3)
mongoid (3.0.21)
  activemodel (~> 3.1)
  moped (~> 1.2)
  origin (~> 1.0)

mongoid-rspec (1.6.0)
  mongoid (>= 3.0.1)
  rake
  rspec (>= 2.9)
mongoid_spacial (0.2.16)
  activesupport (~> 3.0)
  mongoid (>= 2.3.0)

并注释掉

config.use_transactional_fixtures = true

config.fixture_path = "#{::Rails.root}/spec/fixtures"

在 spec_helper.rb

于 2013-02-10T01:54:35.227 回答
0

它没有使用 bson_ext gem,可能是因为它太旧了,显然 bson-1.8.2 有问题。

您可以删除: gem 'bson_ext', '~> 1.3.1' 并尝试捆绑安装(这可能会默认安装 bson_ext)

或更改: gem 'bson_ext', '~> 1.3.1' to gem 'bson_ext'

并进行捆绑升级 bson_ext(这应该强制并升级到 bson_ext)

于 2013-01-29T18:52:38.417 回答