找出哪个 gem 正在请求 rb-inotify

Figure out which gem is requesting rb-inotify

正在尝试找出哪个 gem 正在请求特定的 gem。除非我将有问题的 gem 固定到特定版本,否则不会构建捆绑包,该版本隐藏了请求的 gem 信息(gem 看起来像是从 gem 文件加载的,它是,但只是因为它不会使用最新版本构建)。我如何找出请求 gem?

tl;博士;我正在尝试在我的 Mac OS X 系统上从 Rails 4.1 迁移到 4.2。一些 gem 正在请求 rb-inotify,它的最新版本将无法工作,因为它需要 Ruby >= 2.2 而我使用的是 2.0。我可以将 rb-inotify 添加到版本为 0.9.1 的 gem 文件中,以便完成构建,但是 运行 我的应用程序在 attach_function 的 ffi 中失败,因为“inotify_init" 在 libc.dylib 中找不到。 rb-inotify 没有在 4.1 中加载,所以我怀疑我得到了一些 gem 的错误版本,它在不应该使用的时候请求 rb-inotify。我想看看哪个 gem 有 rb-inotify 作为依赖项,但由于我必须将它固定到版本 '0.9.1' 才能获得构建,gemfile 只显示它根据 gem 文件的要求,而不是任何其他 gem。我试图为 rb-inotify grep 我所有的 gems' gempspecs 但唯一的匹配来自 listen 和 newrelic-rpm (即使在我成功构建之后,它们都不包含在我的包中) .我如何确定哪个 gem 被拉入并请求 rb-inotify?

原来 SASS 正在请求 rb-inotify。它正在加载 SASS 的最新版本,我不得不将它(和 sass-rails)固定到旧版本。是什么帮助我找到了 .

的 DependencyTree 解决方案

Trying to figure out which gem is requesting a specific gem. ... How can I figure out the requesting gem?

yarn why的启发,我为此写了一个打包插件。

bundle why tzinfo
ransack -> activesupport -> tzinfo
rspec-rails -> activesupport -> tzinfo
business_time -> tzinfo

https://github.com/jaredbeck/bundler-why

或者,您可以 grep 您的 Gemfile.lock