【问题标题】:Pry not finding installed gems (ruby 2.2.0, rvm)窥探未找到已安装的 gem(ruby 2.2.0,rvm)
【发布时间】: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 是由 ruby​​gems 库中的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 中遇到了这个问题,但这是因为 ruby​​gems 类的意外输出。

标签: ruby gem rubygems rvm


【解决方案1】:

我想不通,所以我认为我的宝石的保存方式存在一些问题。我尝试了rvm remove 2.2.0 --gems 然后重新安装,这解决了这个问题。

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

【讨论】:

    【解决方案2】:

    我在使用 pry-rails 和 ruby​​ 2.3.0、rails 4.2.6 时遇到了同样的问题。我使用 rvm 删除 ruby​​ 并重新安装,一切正常。

    但是,仔细想想,我猜真正的问题是 spring 正在某个地方运行旧的 gemset。使用 bundler 安装 gem 后,您应该输入 spring stop,然后再次运行 rails c。它应该可以正常运行。

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2017-11-22
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多