iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0
自我挑戰組

非本科之30天Ruby / Rails學習筆記系列 第 15

Day15: Rails中的Gemfile

  • 分享至 

  • xImage
  •  

在Ruby的宇宙裡,有很多用Ruby寫成的套件包或是框架可以使用,包含rails也是(第6行)。

Gemfile是Rails new一個新專案時附加的檔案(如上圖rails 5.2.3),主要管理此Rails專案該會使用哪些gem檔案及版本號,在跑bundle install時就會安裝到這個專案,所以可以視為紀錄這個專案該使用哪些gem的檔案,讓專案被其他使用者pull下來時,都能根據Gemfile裡的gem去安裝。

裡面怎麼那麼多東西?

讓我們來稍微檢視一下,預設的Gemfile到底有哪些東西,分別是做什麼用的?(抱歉可能沒辦法一個一個檢視...)

告訴Rails該去哪裡抓Gem下來用,預設為 rubygems.org

source "https://rubygems.org”

還會再多設置一個GitHub的URL當做備用來源

git_source(:github) { |repo| "https://github.com/#{repo}.git” }

版本號

在ruby gem常常會看到後面接”數字.數字.數字“,可以解讀為:
"#{major}.#{minor}.#{build}"

主要版號(major):功能大改,公開的 API 做了不少修正,通常沒辦法向下不相容
次要版號(minor):加了某些新功能,但不影響其它功能,向下相容
修訂版號(build):對現有的功能做了小幅度的修正,可向下相容

by Ruby 語法放大鏡

像最近rails從5.2.3更新為6.0.0,就是很大改版,就要相對注意相容性的問題。

gem的版本號

可以看到有些gem的後面有加~> 3.2.1 >=或沒加等等這幾種:

  • gem後沒加:安裝最新的"穩定"版本
gem 'kaminari'
  • ' ':指定版本
gem "rails", '5.2.3'
  • ">=, <:安裝含1.1版本以上 ~ 不包含1.1.4版本。
gem 'pg', '>= 1.1', '< 1.1.4'
  • ~>:算是縮寫,使用1.9版本以上,但2.0以下(不包括2.0)的最新版本
gem 'omniauth', '~> 1.9'

#等同於

gem 'omniauth', '>= 1.9', '< 2.0'

Gemfile的Grop

大約分為三種,Product(上線/發佈), Development(開發), Test(測試)。

Product 上線 / 發佈:

gem 'rails', '~> 5.2.3'

沒有在grop裡代表上線/發佈時才會使用到

Development(開發)

group :development do
end

寫在Development,這裡的 gem 會在開發時使用,上線時不會用

Test (測試)

group :test do
end

寫在Test裡,這裡的 gem 會在開發時使用,上線時不會用

Development, Test(開發,測試)

group :development, :test do
end

寫在Development裡, Test,這裡的 gem 會在開發及測試時使用,上線時不會用

參考資料:
What is a Gemfile?
Ruby 語法放大鏡

“If you’re walking down the right path and you’re willing to keep walking, eventually you’ll make progress.”

— Barack Obama, the 44th U.S. President

本文同步發佈於: https://louiswuyj.tw/


上一篇
Day14: 淺談Model資料表關聯
下一篇
Day16: 淺談Rails裡的resources
系列文
非本科之30天Ruby / Rails學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言