撬不找已安装的宝石(ruby 2.2.0,rvm)

时间:2015-06-26 22:25:10

标签: ruby gem rubygems rvm

TL;博士

Pry无法找到我安装的几个宝石,因为Gem::Specification找到的宝石与gem list --local找到的宝石不同。 ruby版本是相同的,找到和未找到的宝石的路径似乎是相同的。

我认为我必须与路径或ruby版本混淆,但我找不到罪魁祸首。关于如何解决这个问题的任何想法?

详细

我在OS X Yosemite上使用rvm运行ruby 2.2.0,我遇到一个问题就是找到我安装好的几个宝石(特别是pry-doc)。

以下是我的版本:

lee$ ruby -v 
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]

lee$ pry -v
Pry version 0.10.1 on Ruby 2.2.0

lee$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.6
  - RUBY VERSION: 2.2.0 (2014-12-25 patchlevel 0) [x86_64-darwin14]
  - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.2.0
  - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.2.0/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.2.0/bin
  - SPEC CACHE DIRECTORY: /Users/lee/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-14
  - GEM PATHS:
     - /usr/local/rvm/gems/ruby-2.2.0
     - /usr/local/rvm/gems/ruby-2.2.0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - "gem" => "--omg"
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/rvm/gems/ruby-2.2.0/bin
     - /usr/local/rvm/gems/ruby-2.2.0@global/bin
     - /usr/local/rvm/rubies/ruby-2.2.0/bin
     - /usr/local/rvm/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin
     - /usr/local/git/bin
     - /opt/sm/bin
     - /opt/sm/pkg/active/bin
     - /opt/sm/pkg/active/sbin
     - /opt/sm/bin
     - /opt/sm/pkg/active/bin
     - /opt/sm/pkg/active/sbin

通过命令行列出gems会返回我期望的内容:

lee$ gem list --local | grep 'pry'
pry (0.10.1)
pry-doc (0.8.0)
pry-git (0.2.3)
pry-nav (0.2.4)
pry-rails (0.3.4)

而pry和bash的路径似乎都是相同的

lee$ gem which pry
/usr/local/rvm/gems/ruby-2.2.0/gems/pry-0.10.1/lib/pry.rb

lee$ gem which pry-doc
/usr/local/rvm/gems/ruby-2.2.0/gems/pry-doc-0.8.0/lib/pry-doc.rb

pry(main)> $ pry
From: /usr/local/rvm/gems/ruby-2.2.0/gems/pry-0.10.1/lib/pry/core_extensions.rb @ line 41:
... 

但是,在pry中,可安装的gem由rubygems库中的Gem::Specification控制。运行以下内容:

# I know this method is a mess, but it does the job
def prys
  Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }
    .select { |g| g.name =~ /pry/ }
    .group_by{ |g| g.name }
    .map { |name, versions| 
      "#{name} (#{versions.map { |v| v.version.to_s }.join(', ') })" 
    }
end

prys

返回:

=> ["pry (0.10.1)", "pry-rails (0.3.4)"]

我已经尝试卸载并重新安装以及寻找另一个找到的宝石副本,但没有运气。我无法弄清楚返回的模式。

关于下一步尝试的任何想法?

2 个答案:

答案 0 :(得分:1)

我无法理解,所以我认为我的宝石如何被保存存在一些问题。我尝试rvm remove 2.2.0 --gems然后重新安装,这解决了问题。

我仍然不确定究竟是什么问题,所以如果有人有下一级故障排除步骤,分享可能仍然有用。

答案 1 :(得分:1)

我遇到了与pry-rails和ruby 2.3.0相同的问题,rails 4.2.6。我使用rvm删除ruby并重新安装它,一切正常。

但是,考虑到这一点,我想真正的问题是spring正在使用旧的gemset运行。使用bundler安装gem后,应键入spring stop,然后再次运行rails c。它应该运行正常。