在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的後面有加~>
3.2.1
>=
或沒加等等這幾種:
gem 'kaminari'
gem "rails", '5.2.3'
gem 'pg', '>= 1.1', '< 1.1.4'
gem 'omniauth', '~> 1.9'
#等同於
gem 'omniauth', '>= 1.9', '< 2.0'
大約分為三種,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/