iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 26
0

什麼是Gemfile

爬文都會說Gemfile是一個用來描述Gems與應用程式之間相依賴的文件。最簡單的說法就是, Gemfile掌管所有Gems套件的版本。所以當我們執行$ bundle install時,Bundler會根據專案目錄中Gemfile裡設定的條件,檢查指定的Gem與相依套件是否已經安裝。

Rails 5.2.3版本為例
Gemfile檔案打開,內容大概會長這樣:
https://ithelp.ithome.com.tw/upload/images/20191012/201209474DSwddkKSd.jpg

群組Group

Gemfile檔案下方,會看到 :development、:development, :test、:test等等的 group,這是Gemfile將Gems另做環境分組,在專案的執行過程,包在group的Gems只會在指定的環境下被 require,這樣的作法,可以讓應用程式執行時避免require不必要的Gems,在整體專案執行速度上更優化。

development
https://ithelp.ithome.com.tw/upload/images/20191012/20120947NiT3zB7aFg.jpg

development, test
https://ithelp.ithome.com.tw/upload/images/20191012/20120947jJ1YO3wUlr.jpg

test
https://ithelp.ithome.com.tw/upload/images/20191012/20120947cMkQgqDfIQ.jpg

Gemfile的Gem版號

先從最簡單的來看,沒有版本號碼的時候:

gem 'sqlite3'
這樣在安裝時,對 Rails 來說會選擇「最新的穩定(stable)版本」而不是「最新版本」。
有版本號的時候又可分成:
gem 'rails', '5.2.3'                 # 指定安裝 5.2.3 版本
gem 'uglifier', '>= 1.3.0'           # 安裝大於等於 1.3.0 版本
gem 'listen', '>= 3.0.5', '< 3.2'    # 安裝 3.0.5 ~ 3.2 之間的版本
gem 'coffee-rails', '~> 4.2'       # 安裝4.2.x中的最新版本

其中~>表示 4.2 以上,但 4.3 以下( 不包括 4.3 ) 的最新版本。 也可以確保未來不會因為套件升級而出現錯誤。

版本號更新

版本號通常用三個數字分別代表主要版號 (Major)、次要版號 (Minor)以及修訂版號 (Patch)

以Rails5.2.3版本來說5、2、3 ,依序分別為:
主要版號 Major:功能大改,公開的 API 做了不少修正,通常沒辦法向下不相容
次要版號 Minor:加了某些新功能,但不影響其它功能,可向下相容
修訂版號 Patch:對現有的功能做了小幅度的修正,可向下相容
這是個不成文的規定(語義化版本),幾乎大部份的gem作者都會依照這個規範。


參考連結:

What is a Gemfile
Ruby 語法放大鏡之「在 Gemfile 裡看到版本寫法有好幾款,各是代表什麼意思?」
Ruby Gemfile 详解


上一篇
Day25 | form_for vs. form_with
下一篇
Day27 | Rails 的 Spring 指令
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30

尚未有邦友留言

立即登入留言