1

我正在研究宝石。

尽管指定了 activemodel 的版本,gem 实际上使用的是 activemodel 4.0.0。从 4.0.0 开始,构造函数只接受一个参数。因此,当我尝试传入第二个参数时,我得到一个参数错误:

/Users/me/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/activerecord-4.0.0/lib/active_record/core.rb:180:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)

为什么 Rubygems 使用错误版本的 ActiveModel?

我在 gemspec 中指定了以下依赖项:

  gem.add_dependency "log4r"
  gem.add_dependency "deep_end"
  gem.add_dependency "google_drive"

  gem.add_development_dependency 'rake'
  gem.add_development_dependency 'rspec'
  gem.add_development_dependency "activemodel", "3.2.13"
  gem.add_development_dependency "activerecord", "3.2.13"
  gem.add_development_dependency "activesupport", "3.2.13"

我的 Gemfile.lock 看起来像这样:

PATH
  remote: .
  specs:
    drive_time (0.0.1)
      deep_end
      google_drive
      log4r

GEM
  remote: https://rubygems.org/
  specs:
    activemodel (3.2.13)
      activesupport (= 3.2.13)
      builder (~> 3.0.0)
    activerecord (3.2.13)
      activemodel (= 3.2.13)
      activesupport (= 3.2.13)
      arel (~> 3.0.2)
      tzinfo (~> 0.3.29)
    activesupport (3.2.13)
      i18n (= 0.6.1)
      multi_json (~> 1.0)
    arel (3.0.2)
    builder (3.0.4)
    deep_end (0.0.1)
      log4r
    diff-lcs (1.2.4)
    faraday (0.8.7)
      multipart-post (~> 1.1)
    google_drive (0.3.6)
      nokogiri (>= 1.4.4, != 1.5.2, != 1.5.1)
      oauth (>= 0.3.6)
      oauth2 (>= 0.5.0)
    httpauth (0.2.0)
    i18n (0.6.1)
    jwt (0.1.8)
      multi_json (>= 1.5)
    log4r (1.1.10)
    mini_portile (0.5.0)
    multi_json (1.7.7)
    multi_xml (0.5.4)
    multipart-post (1.2.0)
    nokogiri (1.6.0)
      mini_portile (~> 0.5.0)
    oauth (0.4.7)
    oauth2 (0.9.2)
      faraday (~> 0.8)
      httpauth (~> 0.2)
      jwt (~> 0.1.4)
      multi_json (~> 1.0)
      multi_xml (~> 0.5)
      rack (~> 1.2)
    rack (1.5.2)
    rake (10.1.0)
    rspec (2.13.0)
      rspec-core (~> 2.13.0)
      rspec-expectations (~> 2.13.0)
      rspec-mocks (~> 2.13.0)
    rspec-core (2.13.1)
    rspec-expectations (2.13.0)
      diff-lcs (>= 1.1.3, < 2.0)
    rspec-mocks (2.13.1)
    tzinfo (0.3.37)

PLATFORMS
  ruby

DEPENDENCIES
  activerecord (= 3.2.13)
  activesupport (= 3.2.13)
  drive_time!
  rake
  rspec

我还得到以下信息:

$ bundle show activemodel #/Users/pedr/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/activemodel-3.2.13
4

2 回答 2

1

确保您使用 运行代码bundle exec,否则 ruby​​ 将默认使用您已安装的最新版本的 gem。

Usingbundle exec将禁止加载任何不在你的包中的 gem,并且应该纠正你的问题。查看手册页以获取更多详细信息。

希望这可以帮助!

于 2013-07-06T00:47:56.917 回答
0

在尝试了我能想到的一切之后,下面的方法已经成功了(尽管它是否已经永久地解决了这个问题,只有时间会证明一切)。

  1. $ gem clean
  2. 卸载 rbenv
  3. 安装 rbenv
  4. 删除 Gemfile.lock
  5. $ bundle
于 2013-07-06T08:10:31.570 回答