因此!您已經聽說 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 install bundler
,RubyGems 會安裝 Bundler 的最新版本。
現在您已經安裝了 Bundler 2,您應該知道 Bundler 會根據您的應用程式的 Gemfile.lock
在版本 1 和版本 2 之間自動切換。如果您的鎖定檔是由 Bundler 1 建立的,您的指令將由 Bundler 1 執行。如果您的鎖定檔是由 Bundler 2 建立的,您的指令將由 Bundler 2 執行。
以下是使用 Bundler 1.17.1 建立的 Gemfile.lock 範例。
GEM
remote: https://rubygems.org/
specs:
rack (2.2.4)
PLATFORMS
ruby
DEPENDENCIES
rack
BUNDLED WITH
1.17.1
Bundler 會讀取 BUNDLED WITH
區段中的 Bundler 版本,以決定應執行哪個 Bundler 版本。使用上述鎖定檔範例,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。這樣,如果發生問題或無法正常運作,您隨時可以還原到先前的鎖定檔,並重新使用 Bundler 1。
當你使用 bundle init
、rails new
或類似的指令建立新的應用程式時,你的應用程式會使用目前已安裝的最新版 Bundler。如果你已安裝 Bundler 2,你的應用程式會鎖定到 Bundler 2。你可以透過閱讀鎖定檔,尋找名為 BUNDLED WITH
的區段來驗證這一點。
許多 Ruby 開發人員的機器上有多個應用程式。如果我們強制一台機器上的所有應用程式都只能使用 Bundler 1 或 Bundler 2,這會讓所有人都感到非常痛苦。
版本切換讓所有人都可以在同一台機器上,同時讓某些應用程式使用 Bundler 1,而其他應用程式使用 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 buildpack 升級為支援 Bundler 2。請參閱Heroku 有關 Bundler 版本的文章以取得更多詳細資訊。