Docs header transparent bg

如何使用 Gemfile 封裝和分享程式碼

將程式碼提交到版本控制

開發應用程式一段時間後,請將應用程式與 GemfileGemfile.lock 快照一起提交。現在,您的儲存庫記錄了上次您確定應用程式運作時所使用所有寶石的確切版本。請記住,雖然您的 Gemfile 只列出三個寶石(版本嚴謹度不同),但您的應用程式依賴於數十個寶石,一旦您考慮到所依賴寶石的所有隱含需求時。

這很重要:Gemfile.lock 使您的應用程式成為您自己的程式碼和上次您確定一切正常時執行的第三方程式碼的單一封裝。在 Gemfile 中指定您依賴的第三方程式碼的確切版本無法提供相同的保證,因為寶石通常會為其依賴項宣告一系列版本。

下次您在同一台機器上執行 bundle install 時,bundler 會看到它已經具備您需要的所有依賴項,並略過安裝程序。

請勿提交 .bundle 目錄或其內任何檔案。這些檔案特定於每台特定機器,並用於在 bundle install 命令執行之間持續保留安裝選項。

如果您已執行 bundle pack,您的套件所需的寶石(儘管不包括 git 寶石)將下載到 vendor/cache。如果所有您需要的寶石都存在於該資料夾中並提交到您的原始碼控制中,則 Bundler 可以在不連線到網際網路(或 RubyGems 伺服器)的情況下執行。這是一個選用的步驟,由於您的原始碼控制儲存庫大小會增加,因此不建議使用。

與其他開發人員分享您的應用程式

當您的共同開發人員(或您在另一台機器上)檢出您的程式碼時,它將附帶您在上次開發的機器上(在 Gemfile.lock 中)應用程式所使用的所有第三方程式碼的確切版本。當他們執行 bundle install 時,bundler 會找到 Gemfile.lock 並略過依賴項解析步驟。相反,它將安裝您在原始機器上使用的所有相同寶石。

換句話說,您不必猜測應該安裝哪些版本的相依性。在我們一直在使用的範例中,即使rack-cache宣告相依於rack >= 0.4,我們確定它適用於rack 1.5.2。即使 Rack 團隊發布rack 1.5.3,bundler 仍會始終安裝1.5.2,也就是我們知道可用的寶石的確切版本。這減輕了應用程式開發人員大量的維護負擔,因為所有機器始終執行完全相同的第三方程式碼。

如果您發現錯誤或發現有遺漏,請在 GitHub 上編輯此文件