Rubygems加载错误的Gem版本

时间:2013-07-05 16:22:13

标签: ruby rubygems gem activemodel

我正在研究宝石。

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

/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

2 个答案:

答案 0 :(得分:1)

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

使用bundle exec将禁止加载不在您的捆绑包中的任何宝石,并应纠正您的问题。查看manpage了解更多详情。

希望这有帮助!

答案 1 :(得分:0)

在尝试了我所能想到的一切之后,以下就完成了这个伎俩(尽管它是否已经永久性地解决了这个问题,只有时间会证明这一点。)

  1. $ gem clean
  2. 卸载rbenv
  3. 安装rbenv
  4. 删除Gemfile.lock
  5. $ bundle