Rails 中的 Gemfile 檔案的內容

被端走的小菜
4 min readSep 15, 2019

--

建立 Rails 新專案時 (以 5.2.3 為例),接著開啟專案中「Gemfile」檔案:

Rails 5.2.3 Gemfile
Rails Gemfile 截圖

會發現第 1–2 行寫著如下:

source ‘https://rubygems.org'
git_source(:github) { |repo| “https://github.com/#{repo}.git" }

Gemfile 需要至少一個 gem 來源,以 RubyGems 伺服器 URL 格式來說,透過執行產生具有預設 rubygems.org 的 Gemfile bundle init,請使用https以便使用 SSL 驗證與 rubygems.org 的連結。

往下看,發現下面程式碼起手式大部分為gemgroup 開頭:
先從gem 開頭介紹每個版本的涵義:

沒寫版本

gem ‘sqlite3’
gem ‘spring’

安裝時選用「最新的穩定版本」,重點在「穩定」而非「最新」。

有寫版本

ruby '2.6.3'
如看到所說,「我要安裝Ruby 2.6.3 版本」。

大於等於、小於

gem ‘uglifier’, ‘>= 1.3.0’

安裝大於等於 1.3.0 版本。

gem ‘listen’, ‘>= 3.0.5’, ‘< 3.2’

安裝大於等於 3.0.5 及小於 3.2 的版本。

差不多

gem ‘rails’, ‘~> 5.2.3’

安裝 5.2.3 以上,但 5.3 以下(不含5.3)的最新版本。

放在 group 中:

group :development, :test do
(略)
end

只在開發(:development)、測試(:test)環境中能使用,像是 spring (可看上篇文章),網站上線時不需讓使用者看到、用到,就會寫在這裡面。

只想單獨讓開發(:development)或測試(:test)使用,可各別寫在對應的 group內喔。

說到 Gemfile 一定要介紹下 RubyGems,上面提供許多好用的 Gem 套件可供使用,像是bootstrapfakersimple_formdevisehirb-unicoderspec-railsfactory_bot_rails…等,使用前記得先翻閱文件,會更清楚如何使用

如何新增 gem 呢?
RubyGems 搜尋需要的 gem 並加入 Gemfile 中,接著再終端機輸入

bundle install

bundle

就能使用囉~ (有些 gem 要將 server 重啟喔,記得看文件(很重要講三次))

打開看 Gemfile.lock 檔案,會發現目前所有套件的快照檔已被存下來
未來 bundle 時,會根據快照檔 Gemfile.lock 決定 Gemfile 是否有修改來進行套件更新

為什麼要這麼麻煩?
不如說這是貼心的代價,以版本 5.2.3 為例,523三個數字分別代表主要版號(Major)、次要版號(Minor)、修訂版號(Path),表示如下:
主要版號:功能大改,公開的 API 做了不少修正,不一定能向下相容。
次要版號:加入某些新功能,但不影響其它功能,能向下相容。
修訂版號:對現有的功能做小幅度修正,可向下相容。

若沒有版本控制,每次都安裝最新版,導致舊版或某些 API 不相容或產生衝突時,通往「相依性地獄」的死亡之谷將給你滿滿地絕望…

--

--

被端走的小菜
被端走的小菜

Written by 被端走的小菜

大家好,我是被端走的小菜。以個人部落格更新為主:https://riverye.com/

No responses yet