Rails初心者的學習筆記2:Rails的app:Gem

Apple Chen
4 min readSep 14, 2019

--

這次要介紹的是學習Rails一定會用到的gem。

什麼是Gem?

Gem是所謂的「套件」,可以想像成手機的app,下載後可以幫Rails增加某些功能,讓開發者可以偷懶不用自己手刻(誤)

簡單介紹幾個目前用過的gem:
Kaminari:製作換頁功能。當有多筆資料時,就會用到換頁功能。據說作者住在雷門附近所以才取了這個名字。

Faker:產生假資料。做測試時需要產生一些假的姓名、email、電話等資料,有了這個gem就可以快速產生大量的假資料。

Devise:建立會員註冊及登入模組,網頁有登入模式的話,可使用這個套件快速建立註冊頁面。

如何安裝Gem?

用Rails new一個專案時,自動會生成一個gemfile。裡面列的是跑Rails專案所需要的套件。如果要新增,可以到https://rubygems.org/搜尋最新版本,
按下下圖的圖示即可複製路徑,貼到gemfile後存檔,在終端機輸入bundle install(工程師都是很懶的,install可以省略)就算初步安裝完成。接著再查閱該gem的說明文件,在Model或Controller或View等檔案中加上需要的文字就可以讓gem發揮效果了。

安裝時的注意事項

  1. 注意版本
gem 'kaminari'               # 安裝最新的穩定版本
gem 'rails', '3.0.0.beta3' # 安裝3.0.0.beta3版本
gem 'rack', '>=1.0' # 安裝1.0以上的版本
gem 'nokogiri', '~> 1.6.1' # 安裝1.6.1以上,但1.7以下的版本

2. 注意貼上的位置

可以看到gemfile裡分成了幾個group,可以讓套件在特定環境才會載入。例如上圖中的 ’hirb-unicode’ 套件只打算在開發和測試環境下使用,所以就放在development、test的group裡。

同場加映:bundler和Gemfile.lock

Bundler是管理gem 相容性(dependencies)的工具,它會根據 Gemfile 的設定自動下載及安裝 gem 套件,並且幫你解決不同套件之間相容性的問題。gem本身有自己的相容性,不同的gem可能相容其他不同版本的gem,比方說gem A相容於gem B的1.0.0版本,但是gem C相容於gem B的1.1.0版本,如何讓不同版本的gem不發生衝突,就是bundler的工作了。Bundler除了會安裝記載於gemfile上的gem,也會找出和這個gem相容的gem並進行安裝。

新增gem並跑完bundle install後,bundler會更新Gemfile.lock,記錄目前專案使用的gem版本。如果專案是多人協作,則需將這份Gemfile.lock檔放入版控,當其他開發者執行bundle時,便會依照這份Gemfile.lock的gem版本進行安裝,確保大家的版本一致。

參考資料:

為你自己學Ruby on Rails

Gemfileについて調べてみた

Bundlerを使ったGemパッケージの管理

Ruby on Rails 實戰聖經

https://bundler.io/v1.7/rationale.html

Gemfile 和 Gemfile.lock

--

--