【发布时间】:2015-06-26 22:25:09
【问题描述】:
tl;博士
Pry 找不到我安装的几个 gem,因为 Gem::Specification 找到的 gem 与 gem list --local 找到的 gem 不同。 ruby 版本是一样的,找到和未找到的 gem 的路径似乎是一样的。
我认为我必须与路径或 ruby 版本混淆,但我找不到罪魁祸首。关于如何解决这个问题的任何想法?
详情
我在 OS X Yosemite 上使用 rvm 运行 ruby 2.2.0,但在撬开我已安装的几个 gem(特别是 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
通过命令行列出 gem 会返回我所期望的结果:
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:
...
不过,可以安装的 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)"]
我已经尝试卸载并重新安装以及四处寻找找到的 gem 的另一个副本,但没有运气。我也无法弄清楚返回的模式。
对接下来要尝试什么有什么想法吗?
【问题讨论】:
-
你可能想在 github 上使用 pry 打开一个新问题。
-
我在 pry 中遇到了这个问题,但这是因为 rubygems 类的意外输出。