在阅读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的日期和今天之间的某个时候,这不再是真的。
有谁能看出我的思想哪里出错了吗?
1条答案
按热度按时间mzmfm0qo1#
看起来this PR对Bundler代码库进行了更改,例如
Gem.load_env_plugins
被Gem.load_plugins
替换。后者在与前者不同的目录中搜索插件,这意味着RBENV的rubygems_plugins.rb
不再被找到或加载。我通过将
Gem.load_env_plugins
重新添加到我的Bundler安装的lib/bundler/cli/install.rb
文件的源代码中并重新运行bundle install
来确认这一点。这导致我成功地命中了我添加到RBENV的rubygems_plugin.rb
文件中的断点。