如何找出哪个 gem 具有特定的依赖关系?
Posted
技术标签:
【中文标题】如何找出哪个 gem 具有特定的依赖关系?【英文标题】:How do I find out which gem has a specific dependency? 【发布时间】:2013-02-11 07:29:27 【问题描述】:我注释掉了一个 gem,但“捆绑安装”仍然无法运行。如何找出哪个 gem 依赖于 sys-proctable?
$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Could not find sys-proctable-0.9.2 in any of the sources
$ grep proctable Gemfile
#gem 'sys-proctable', '0.9.2', :path => "vendor/gems"
$ bundle list
Resolving dependencies...
Could not find gem 'rspec-rails (= 2.11.0) ruby' in the gems available on this machine.
$ bundle viz
Resolving dependencies...
Could not find gem 'rspec-rails (= 2.11.0) ruby' in the gems available on this machine.
$ bundle -v
Bundler version 1.3.0
$ ruby -v
ruby 1.9.3p385 (2013-02-06 revision 39114) [i386-cygwin]
宝石文件:http://pastebin.com/9WWMfKtv
我已经尝试过这些故障排除步骤:https://github.com/carlhuda/bundler/blob/1-2-stable/ISSUES.md
【问题讨论】:
Gemfile.lock 通常会显示您的依赖项,但我不确定它是否已为您生成,因为捆绑程序未成功完成。 【参考方案1】:在 bash shell 中你可以这样做:
gem dependency name_of_the_gem --reverse-dependencies
例如:
$ gem dependency activesupport --reverse-dependencies
Gem activesupport-2.3.14
Used by
actionpack-2.3.14 (activesupport (= 2.3.14))
activerecord-2.3.14 (activesupport (= 2.3.14))
activeresource-2.3.14 (activesupport (= 2.3.14))
【讨论】:
那行不通。gem dependency --pipe sys-proctable
打印了 test-unit --version '>= 2.4.0'
,但该 gem 也不在我的 Gemfile 中:grep test-unit Gemfile
。
@Chloe 你能试试这个吗:gem dependency sys-proctable --reverse-dependencies,我在命令中添加了反向依赖选项。
是的!这样可行! Used by guard-spork-1.2.0 (sys-proctable (>= 0))
对我来说,它仅在指定 -b
参数时才有效(“-b
, --both
- 允许本地和远程操作”)
如果没有实际安装 gem,这将不起作用。【参考方案2】:
我知道这个答案包含一个链接,但这不是一个链接特定的答案
您始终可以在 rubygems.org 上检查 gem 的反向依赖关系。网站右侧面板上有一个链接。
或者您可以访问该网站
https://rubygems.org/gems/gem_name/reverse_dependencies
所以,在你的情况下
https://rubygems.org/gems/sys-proctable/reverse_dependencies
【讨论】:
【参考方案3】:我如何找出哪个 gem 依赖于 sys-proctable?
试试bundler-why 插件(灵感来自yarn why
)
bundler plugin install bundler-why
bundle why tzinfo
# ransack -> activesupport -> tzinfo
# rspec-rails -> activesupport -> tzinfo
# business_time -> tzinfo
gem dependency --reverse-dependencies
将遍历paths 中的一个edge。相比之下,bundle why
将遍历所有边。
【讨论】:
以上是关于如何找出哪个 gem 具有特定的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章
如何(正确)使用具有依赖关系的表单请求 + 策略 + 资源路由?