所以!您已经听说过Bundler 2 发布了!如果您想亲自尝试 Bundler 2,本指南将帮助您做到这一点。
Bundler 2 与之前的版本 1.17 几乎完全相同。最大的变化是 Bundler 现在需要至少 Ruby 2.3.0 和 RubyGems 2.5.0。
在升级到 Bundler 2 之前,请确保您拥有正确的 Ruby 和 RubyGems。您需要使用 Ruby 2.3.0 或更高版本,并且需要安装 RubyGems 2.5.0 或更高版本。
您可以通过运行 ruby --version
检查您的 Ruby 版本,并通过运行 gem --version
检查您的 RubyGems 版本。如果您需要升级 Ruby,请使用您的 Ruby 版本管理器的说明。如果您需要升级 RubyGems,请运行 gem update --system
。
都准备好了吗?Ruby 和 RubyGems 版本足够新吗?很好。继续。
升级到 Bundler 2 的第一步是安装 Bundler 2 gem。要以通常的方式安装它,请运行 gem install bundler
,RubyGems 将安装最新版本的 Bundler。
现在您已经安装了 Bundler 2,您应该知道 Bundler 会根据您的应用程序的 Gemfile.lock
自动在版本 1 和版本 2 之间切换。如果您的 lockfile 是由 Bundler 1 创建的,您的命令将由 Bundler 1 运行。如果您的 lockfile 是由 Bundler 2 创建的,您的命令将由 Bundler 2 运行。
以下是一个由 Bundler 1.17.1 创建的 Gemfile.lock 示例。
GEM
remote: http://rubygems.org.cn/
specs:
rack (2.2.4)
PLATFORMS
ruby
DEPENDENCIES
rack
BUNDLED WITH
1.17.1
BUNDLED WITH
部分中的 Bundler 版本由 Bundler 读取,以确定应该运行哪个版本的 Bundler。使用上面的示例 lock,Bundler 1 将被使用,如您在此处所见
$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
1.17.1
$ bundle version
Bundler version 1.17.1
当 Gemfile 由 Bundler 2 创建,或由开发人员从 Bundler 1 手动升级到 Bundler 2 时,命令将由最新安装的 Bundler 2 运行。以下是一个示例,说明了它的样子
$ grep -A 1 "BUNDLED WITH" Gemfile.lock
BUNDLED WITH
2.0.0
$ bundle version
Bundler version 2.0.0
当 Bundler 在应用程序之外使用时,将始终使用最新安装的版本。
$ ls -a
. ..
$ bundle version
Bundler version 2.0.0
您现有的应用程序将继续使用 Bundler 1。Bundler 永远不会将您的应用程序更改为新的主要版本,直到您选择这样做为止。如果您的应用程序已准备就绪,您可以通过运行 bundle update --bundler
将该应用程序升级到最新安装的 Bundler 版本。
我们建议您在升级之前提交您的 Gemfile.lock。这样,如果出现问题或无法正常工作,您始终可以恢复到之前的 lockfile 并返回使用 Bundler 1。
当您使用 bundle init
、rails new
或类似命令创建新应用程序时,您的应用程序将使用当前安装的最新版本的 Bundler。如果您安装了 Bundler 2,您的应用程序将锁定到 Bundler 2。您可以通过阅读 lockfile 并查找名为 BUNDLED WITH
的部分来验证这一点。
许多 Ruby 开发人员在他们的机器上拥有多个应用程序。如果我们强制一台机器上的所有应用程序都只使用 Bundler 1 或 Bundler 2,这将给每个人带来巨大的痛苦。
版本切换允许每个人在同一台机器上同时使用 Bundler 1 和 Bundler 2,而其他应用程序可以使用 Bundler 2。每个应用程序都可以升级到 Bundler 2,只要对该特定应用程序进行升级是最有意义的。
如果您尝试在需要 Bundler 2 的应用程序上使用 Bundler 1,您将看到一条错误消息,说明您需要安装 Bundler 2。继续运行 gem install bundler
,然后它应该可以工作。
如果您尝试在需要 Bundler 1 的应用程序上使用 Bundler 2,并且您根本没有安装 Bundler 1,您将看到一条错误消息,要求您安装 Bundler 1。继续运行 gem install bundler -v "~>1.0"
来安装最新版本的 Bundler 1.x,然后再次尝试您的命令。
Bundler 2 不提供将 Gemfile 降级回 Bundler 1 的方法。相反,我们建议您在升级应用程序之前检查您的 Gemfile
和 Gemfile.lock
。这样,如果出现问题,您可以恢复到之前的提交并返回使用 Bundler 1。
哦,不!对此表示歉意。请访问我们的 故障排除指南 并创建一个工单,以便我们尽快尝试解决您的问题。
Bundler 2 包含以下更改
Gemfile
中的 github:
快捷方式将使用 https
而不是 http
可以!Heroku 团队已将官方 Ruby 构建包升级到 支持 Bundler 2。有关更多详细信息,请参阅 Heroku 关于 Bundler 版本的文章。