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)"]
我已经尝试卸载并重新安装以及寻找另一个找到的宝石副本,但没有运气。我无法弄清楚返回的模式。
关于下一步尝试的任何想法?
答案 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
。它应该运行正常。