【问题标题】:Bundle says gem is missing - but it's not?Bundle 说 gem 不见了 - 但不是吗?
【发布时间】:2012-05-11 22:34:25
【问题描述】:

背景

我正在维护一个 Ruby On Rails 网站的内容,但我真的没有使用 Rails 的经验。

尝试运行 Rails 服务器时:rails s 我明白了:

在任何来源中都找不到 activesupport-3.2.0

运行bundle install 安装缺失的gem

我运行捆绑安装

Gem::InstallError: factory_girl 需要 Ruby 版本 >= 1.9.2。一个 安装 factory_girl (3.2.0) 和 Bundler 时发生错误 无法继续。

确保gem install factory_girl -v '3.2.0' 在捆绑之前成功。

好的,我按照说明安装 factory_girl:

安装成功 factory_girl-3.2.0 已安装 1 个宝石

再次运行捆绑安装:

Gem::InstallError: factory_girl 需要 Ruby 版本 >= 1.9.2。安装时发生错误 factory_girl (3.2.0),并且 Bundler 无法继续。在捆绑之前确保gem install factory_girl -v '3.2.0' 成功。

你有什么想法吗?

信息

昨天我在尝试运行 rails server 时遇到了交叉线程错误。所以按照this SO advice,我建议我已经安装了 RVM 并安装了 rbenv 和 bundler 而不是 RVM。

我已经尝试过 Ruby 1.9.3-p125 和 1.9.3-rc1

gem list 的输出显示 factory_girl 已安装。

  • ...
  • factory_girl (3.2.0)
  • ...

gem environment的输出表明问题可能与安装 ruby​​ 1.9.1 有关?

RubyGems 环境:
- RUBYGEMS 版本:1.8.10
- 红宝石版本:1.9.3(2011-09-23 补丁级别 -1)[x86_64-darwin11.3.0]
- 安装目录:/Users/andreas/.rbenv/versions/1.9.3-rc1/lib/ruby/gems/1.9.1
- RUBY 可执行文件:/Users/andreas/.rbenv/versions/1.9.3-rc1/bin/ruby
- 可执行目录:/Users/andreas/.rbenv/versions/1.9.3-rc1/bin
- RUBYGEMS 平台:
- 红宝石
- x86_64-darwin-11
- 宝石路径:
- /Users/andreas/.rbenv/versions/1.9.3-rc1/lib/ruby/gems/1.9.1
- /Users/andreas/.gem/ruby/1.9.1
- 宝石配置:
- :update_sources => 真
- :verbose => 真
- :benchmark => 假
- :backtrace => 假
- :bulk_threshold => 1000
- "宝石" => "--no-ri --no-rdoc"
- 远程资源:
- http://rubygems.org/

【问题讨论】:

  • 终端输入时得到哪个ruby版本:ruby -v
  • 我认为你的 ruby​​ 是 1.9.1.... => /Users/andreas/.gem/ruby/1.9.1
  • @RobinH 我得到:ruby 1.9.3dev(2011-09-23 修订版 33323)[x86_64-darwin11.3.0]
  • @shuriu - 我不这么认为 - 见上文...
  • 我可以删除:- /Users/andreas/.gem/ruby/1.9.1 吗?

标签: ruby-on-rails ruby rubygems rbenv


【解决方案1】:

第一件事 - 我没有使用 rbenv 的经验。

RVM 的优点之一是它有助于相当明确地说明 Ruby 环境的移动部分是什么。

rvm list 会给你一个红宝石列表 rvm gemset list 会给你一个 gemsets 列表(如果使用 bundler,这应该不是必需的)

现在,这里有一些棘手的事情:

  • Bundler 使用 Gemfile 来确定要安装的内容
  • 如果未指定任何内容,Bundler 将尝试安装最新版本的 gem
  • 如果最新版本的 gem 与您当前的 Ruby 不兼容,那么...
    • 您可以更改 Ruby 的版本(例如 rvm install 1.9.3
    • 您可以告诉 Gemfile 以不同程度的严格性指定您想要的 gem 版本。
      • 你能说我喜欢缩进项目符号吗?
      • gem "vcr", "~> 1.11.3" # => 这表示您更喜欢 1.11.3,但 1.11 范围内的任何内容都可以接受
      • gem 'factory_girl', '3.2.0' # => 这就是说,只安装 factory_girl 的 3.2.0 版本,没有别的

此外,在进行任何其他操作之前,您应该运行 bundle check 以查看 bundler 对您的 gem 的评价。

【讨论】:

    【解决方案2】:

    你试过了吗?

    bundle exec rails s
    

    【讨论】:

      【解决方案3】:

      @jdoe 在 cmets 中回答。它奏效了。显然我需要删除Gemfile.lock

      我不知道为什么或如何。我只是在这里发布这个,直到@jdoe 出现并用真实的答案收集他的分数。

      【讨论】:

      • 删除锁定文件意味着将所有 gem 隐式更新到最新版本,您可能不希望这样做。
      【解决方案4】:

      确保您正在安装的所有 gem 都在 Gemfile 中,因为如果 gem 没有添加到 Gemfile 中,即使您手动安装它,您的 Rails 应用程序也无法获取它。

      示例 Gemfile 将是

      gem 'rails', '3.0.0'
      
      gem 'mysql2', '< 0.3'
      gem 'rails3-jquery-autocomplete'
      
      #authorization
      gem 'authlogic'
      gem 'hoptoad_notifier'
      
      #reporting
      gem 'lazy_high_charts'
      
      group :test do
        gem 'rspec', '2.0.0'
        gem 'rspec-rails', '2.0 '
        gem "test-unit"
      end
      

      【讨论】:

        【解决方案5】:

        尝试使用以下命令重新安装所有 gem:

        bundle install --redownload
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-17
          • 2023-03-21
          • 2020-04-28
          • 1970-01-01
          • 2012-04-21
          • 2016-02-17
          • 2020-01-17
          • 1970-01-01
          相关资源
          最近更新 更多