如何找出哪个 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 具有特定的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

找出所有 DLL 的依赖关系?

如何(正确)使用具有依赖关系的表单请求 + 策略 + 资源路由?

具有依赖关系的 Windows 服务的关闭顺序 [关闭]

领域驱动设计:如何设计具有依赖关系的关系聚合

如何找出特定 Boost 库需要哪些依赖项(即其他 Boost 库)?

如何使用 ant 构建多个具有依赖关系的项目