运行`bundle install`时,未到达`rubygems_plugin.rb`中的调试器语句

krcsximq  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(75)

在阅读RBENV's rubygems_plugin.rb file时,我遇到了以下代码行:

if defined?(Bundler::Installer) && Bundler::Installer.respond_to?(:install) && !Bundler::Installer.respond_to?(:install_without_rbenv_rehash)

字符串
回顾这一行的git历史,我看到这一行的原始版本添加了in this PR from 2015,它的目标是确保rbenv rehash只运行一次,在gem安装过程结束时。rbenv rehash的目标是在~/.rbenv/shims中为任何包含终端命令的Ruby gem生成shim文件。
根据原始PR和讨论,当bundle install命令在包含Gemfile的项目中运行时,似乎会执行此代码。我想逐步完成这个过程,以了解更多关于Bundler的信息,所以我做了以下事情:

  • 我使用rbenv install 3.1.4安装了一个新版本的Ruby(v3.1.4)。
  • 我通过gem install rails安装了rails gem。
  • 我通过rails new foobar生成了一个新的Rails项目。
  • 为了简化,我注解掉了gem的所有调用,除了第一个(gem 'rails', '~> 5.2.8', '>= 5.2.8.1')和我添加的一个(gem 'wisper')。
  • 我在前面提到的rubygems_plugin.rb中的if检查下面添加了一个调试器语句。
  • 我跑了bundle install

但是,我没有命中调试器语句。我还尝试在if语句外放置第二个调试器语句并重新运行bundle install,但该调试器也被跳过。
我最好的猜测是,我只是做错了什么,我的理解是关闭不知何故,这是阻止我到达我的调试器语句。如果没有,我也认为有一个(小)机会:

  • Bundler曾经运行RubyGems插件作为其执行的一部分(因此PR进行了讨论),但...
  • ......在PR的日期和今天之间的某个时候,这不再是真的。

有谁能看出我的思想哪里出错了吗?

mzmfm0qo

mzmfm0qo1#

看起来this PR对Bundler代码库进行了更改,例如Gem.load_env_pluginsGem.load_plugins替换。后者在与前者不同的目录中搜索插件,这意味着RBENV的rubygems_plugins.rb不再被找到或加载。
我通过将Gem.load_env_plugins重新添加到我的Bundler安装的lib/bundler/cli/install.rb文件的源代码中并重新运行bundle install来确认这一点。这导致我成功地命中了我添加到RBENV的rubygems_plugin.rb文件中的断点。

相关问题