20--Bundle與Gemfile

這節課咱們講解Bundle的構建和Gemfile的使用方法。以前咱們只是兩句話代碼,這節課咱們進一步來說解: git

什麼事bundler? ruby

是rails應用程序中對gem依賴包進行管理的一種管理工具。它會根據Gemfile中的設置自動下載及安裝對應的gem套件而且可以幫咱們解決不一樣套件之間的依存關係。同時它可以使得程序在不一樣的部署環境中使用的全部依賴包的版本都可以保持一致(由於Gemfile裏面就做出限定,不一樣環境可是都是根據同一個gemfile文件),這樣移植到其餘電腦或者讓別人協同開發只要都根據同一個gemfile就能保持一致。 工具

Bundler的做用就是根據Gemfile的設置來保證在任何環境下安裝的gem包都是同一個版本。 測試

rails3的版本若是你想添加任何gem包都必須將其顯式地寫在Gemfile中,與以前更早的版本可使用require關鍵詞來引入gem包不一樣。咱們如今用的是rails4的版本,統一使用gemfile進行統一管理明顯更加方便, ui

Gemfile文件的以下代碼表示只有在開發模式和測試模式中才使用裏面的byebug這個gem包,若是想生產環境中也使用這個gem包那麼在group關鍵詞後面一樣方式添加production就能夠了 spa

以下則是隻有開發模式才能使用那個gem包 blog

 

咱們建議Gemfile中版本號寫死了比較好,好比,再不濟也要使用波浪號的(這種方式保證大版本號不變),這樣寫有什麼好處呢?可以最大程度地下降由gem包升級形成的潛在的兼容性的風險,由於ruby和rails開源更新快,因此不把版本寫死極可能會升級到一個新的你不熟悉的版本,從而致使兼容性問題。 開發

好比說,版本號有三部分用點隔開,第一個版本號4發生變更表示發生的是不向下兼容的變更,這是x版本號。若是第二個版本號1發生變更表示有新的功能增長,這是y版本號。若是第三個版本號0變更,表示一些bug的修正,這是z版本號。因此你最不濟也用~>來保證正常使用(大版本號不變,說明頂可能是z版本號變更也就是修復一些bug而已)。 部署

至於的>=就避免使用。 同步

這樣就能保證大型項目有一些升級的彈性又不至於升級太多致使不兼容的錯誤。

 

若是你修改了Gemfile這個文件,好比添加了新的gem包的聲明代碼,或者修改了已有gem包聲明的版本,那麼就須要使用一個命令叫bundle install來安裝咱們全部的gem包,這個命令會檢查並安裝這些gem包同時生成一個Gemfile.lock文件。Gemfile.lock文件會列出當前工程使用的gem套件的具體版本,那麼要注意的是若是你使用git這樣的工具進行工程的同步開發,那麼你必定要記得開commit或者push的時候要把Gemfile.lock文件一併推送過去,這樣其餘上線的開發者就會安裝這個Gemfile.lock裏面指定的庫文件,目的仍是一個:保持多人開發gem版本的一致性。

下一個要講的命令就是,bundle update 後面接上gem包的名字(不是gem_name)好比rails就會去更新相應的gem包版本。

只是bundle update後面無gem包名字,那麼就是默認更新全部的gem包到最新版本。(不到必要,就別去使用bundle update這個命令,不然由於一次性更新太多gem包致使不兼容的機率是很是高的)。因此想升級gem包咱們就在後面添加須要升級的gem包的名字,一次只升級一個就行。

 

總之,若是有gem包發生變更,那麼通常狀況下咱們bundle install一個命令就能所有搞定。若是這個命令在執行過程當中出現沒法安裝的gem包,打斷了安裝的運行(這種狀況很是常見);那麼就須要使用gem命令對這些沒法安裝的gem包進行單獨的安裝並根據提示信息來解決可能出現的錯誤。

 

那麼怎麼知道哪些gem包在咱們工程裏能夠升級呢?那很簡單,咱們可使用命令,就是已過期的命令這個命令會列出全部新版本、可升級的gem以下咱們發現arel已經安裝的版本是6.0.3,最新版本是7.0.0,想升級的話能夠選擇它進行升級就能夠了。

bundle的命令有不少,實際上使用最多的是bundle install這個命令而已(至關於一鍵搞定按鈕了)

相關文章
相關標籤/搜索