要参与 Bundler 的开发,您可能需要做以下几件事
Fork Rubygems 代码仓库,并将 fork 克隆到您的机器上。(请参考此教程了解 fork 代码仓库的步骤。)
使用您的包管理器安装 graphviz
包
sudo apt-get install graphviz -y
对于 OS X(已安装 brew)
brew install graphviz
从 rubygems 根目录安装开发依赖项和 Bundler 的测试依赖项
bin/rake setup spec:parallel_deps
切换到 bundler 目录
cd bundler
现在您可以并行运行测试套件
bin/parallel_rspec
设置一个 shell 别名,以便从您的克隆运行 Bundler,例如 Bash 别名(请参考这些说明了解如何将别名添加到您的 ~/.bashrc
配置文件。)
alias dbundle='ruby /path/to/bundler/repo/spec/support/bundle.rb'
在开发 Bundler 功能或需要更改 RubyGems 的 bug 修复时,您可以通过将 RGV
环境变量设置为指向代码仓库的根目录来确保 Bundler 的测试套件拾取这些更改,例如
RGV=.. bin/parallel_rspec
最好确保您的更改始终针对最新的 RubyGems 工作,因此永久设置此变量可能是一个好主意。您可以使用 direnv 来实现这一点。
RGV
环境变量也可以设置为任意 RubyGems 版本,以确保您在 Bundler 中的更改与这些版本兼容。例如,
RGV=v3.2.33 bin/parallel_rspec
pry
调试要使用 Pry 深入代码:RUBYOPT=-rpry dbundle
以加载 pry,然后运行命令。
背景信息:您可以操作 Ruby 中的环境变量来控制 Ruby 解释器的行为。Ruby 使用 RUBYOPT
环境变量来指定启动 Ruby 时使用的选项。
RUBYOPT
的参数就像您在 ruby
后面键入标志一样应用。-r
标志表示“require”。因此,-rpry
表示 require 'pry'
。为了说明,ruby -rpry /path/to/bundle
与 RUBYOPT=-rpry ruby /path/to/bundle
相同。
因此,RUBYOPT=-rpry dbundle
表示“加载 pry 并加载此 Bundler 路径”,这意味着您将使用 pry
和您的本地 bundler 启动开发环境。
为什么需要这样做? 为什么 require 'pry'; binding.pry
不够?
将RUBYOPT
与dbundle
结合的原因是Bundler接管了可用的gem。如果你在机器上安装了pry
,但没有将其包含在Gemfile中,Bundler本身会从你可以要求的gem列表中删除pry
。设置RUBYOPT=-rpry
是一种在Bundler接管并将其从可要求的gem列表中删除之前要求pry
的方法。这样,你就可以在以后利用binding.pry
并使其正常工作。不幸的是,如果你等到binding.pry
才require 'pry'
,那么只要pry
不在Gemfile中,它就会失败。