iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
自我挑戰組

Ruby and Rails 的二三事系列 第 11

Ruby on Rails 的二三事 - Day11 Gemfile

今天就來簡單的介紹一下Gemfile吧!

Gemfile

Gemfile 是 Rails 用來管理每個 application 要使用哪些 Gem 的檔案。
同時也是個紀錄,讓每份專案不論在哪裏被pull下來,都能根據Gemfile裡的紀錄,
來安裝對應的Gem,以期能達到相同的效果。

在專案裡的Gemfile大概是長這個樣子的:(以rails 5.2.3為例)

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

ruby '2.6.3'
gem 'rails', '~> 5.2.3'
gem 'sqlite3'
gem 'puma', '~> 3.11'
# .....
group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'hirb-unicode'
  gem 'rspec-rails', '~> 3.4', '>= 3.4.2'
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  gem 'chromedriver-helper'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]


What's inside?

下面我們就來介紹檔案裡面到底寫些什麼吧!

  • 這是在告訴Gemfile 要去哪裡去找到這些gems,預設都會是 https://rubygems.org 這個來源。
source 'https://rubygems.org’
  • 通常還會設置GitHub 的 URL 作為備用的來源。
git_source(:github) { |repo| "https://github.com/#{repo}.git” }
  • 這代表這個專案使用的ruby版本是2.6.3,rails的版本則是5.2.3;
    你沒有看錯,rails 本身也是一個gem。
    所以如果有心,也是可以pull一份下來研究裡面的source code的()
ruby '2.6.3'
gem 'rails', '~> 5.2.3'

如何安裝自己要用的Gem?

最簡單的放式:只要在Gemfile裡填入你想安裝的gem的名字,
然後在終端機專案的目錄底下執行bundle 就可以啦!
蛤?你問為什麼不是bundle install,當然是因為懶啊...

gem '你要安裝的gem'
bundle

版本號的設定

版本設定大約可以分為下面幾種:

  • 當只有填寫 gem 的名字時,代表我們要安裝的是最新的穩定版本。
    gem 'sqlite3'
  • 你也可以指定要安裝特定版本,就直接在後面接上版本號。
    gem 'puma', '3.11'
  • 這樣代表允許安裝含3.0.5版本以上 ~ 不包含3.2版本。
gem 'listen', '>= 3.0.5', '< 3.2'
  • ~> 其實是一種縮寫,代表允許安裝含4.3.1版本以上 ~ 不包含4.4版本。
gem 'bootstrap', '~> 4.3.1'
#其他它是這個意思
gem 'bootstrap', '>= 4.3.1', '< 4.4'

什麼是版本號

順便補充一下版本號:版本號的組成是這樣的:
"#{major}.#{minor}.#{build}"

Major: 是主版本號,重大功能變更或是架構有重大更改時會更動,數值才會更動。
Minor: 是次(子)版本號,用在小規模的功能增加、調整或變動時。
Build: 是階段版本號,通常是修復bug或是一些很小的更動。


group的意思是?

Rails 將應用程序的開發環境分為三種:Product(上線/發佈), Development(開發), Test(測試)。

放在 group :development, :test 裡,代表只有 開發和測試的時候會使用。
放在 group :development 或是 group :test裡,則分別代表只有在開發或測試的時候會使用。
而其他沒有被 group 包起來的 gem ,則是上線/發佈時才會使用到的gem。

姆...大概就是這樣啦!

什麼!!鐵人賽才過了1/3嗎? 我們明天再見吧!


上一篇
Ruby on Rails 的二三事 - Day10 其實我不懂Case...When
下一篇
Ruby and Rails 的二三事 - Day12 利用Enum設定欄位資料
系列文
Ruby and Rails 的二三事19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
appletabby
iT邦新手 5 級 ‧ 2019-09-25 23:31:22

應該是「鐵人賽已經過了1/3了」,加油加油!

我要留言

立即登入留言