iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
0
Modern Web

Ruby on Rails面試題挑戰系列 第 26

Ruby on Rails面試題挑戰 Day26 - Gemfile和Gemfile.lock是什麼?

What is Gemfile and Gemfile.lock?
Gemfile和Gemfile.lock是什麼?


Gemfile

Gemfile是一個我們用來描述Ruby程式中gem相依賴關係的檔案。gem是人家將Ruby code包好,讓我們可以使用一些人家包好的功能與方法。他的位置會是project的根目錄。

Gemfile大概會長得像這樣:

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

ruby '2.6.5'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.0.3', '>= 6.0.3.2'
# Use Puma as the app server
gem 'puma', '~> 4.1'
# Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '~> 4.0'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'

....

group :development, :test do
  xxx
end

group :development do
 xxxxxx
end

group :test do
 xxxx
end

有些Gem後面會指定特定版號,例如gem 'capistrano', '3.14.1',就是要指定那一個版本。

大於、小於等於版號也容易理解就是要指定大於或小於等於那個版號。

有另一種比較不容易理解的是~>這個符號,例如gem 'rails', '~> 6.0.3',這是指會選用 6.0.3 以上,但 6.1 以下(不包括 6.1)的最新版本。

6、0、3這三個數字分別是指主要版號、次要版號和修訂版號,主要版號通常無法向下相容,其他兩個通常可以。

group開頭的也很好理解,包在group :test do ....end裡面的就是只需要在測試使用的gem。

Gemfile.lock

Gemfile.lock檔案是Bundler紀錄它實際安裝的gem版本。如此一來,當這個專案被放在別台機器上時,只要執行bundle install就會去查看Gemfile.lock來安裝同一個版本。

Bundler會提供一致的環境讓Rails專案可以安裝同樣的gem和版本。它可以讓不同開發者在開發、測試、佈署時,所有的依存套件版本能夠一致。

你可以這樣回答:

Gemfile是一個我們用來描述Ruby程式中gem相依賴關係的檔案。他的位置會是project的根目錄。

Gemfile.lock檔案是實際安裝的gem版本紀錄。如此一來,當這個專案被放在別台機器上時,只要執行bundle install就會去查看Gemfile.lock來安裝同一個版本。

參考資料

1.Gemfile and Gemfile.lock in Ruby

2.What is a Gemfile

3.為你自己學 Ruby on Rails - 使用套件(Gem)讓開發更有效率

4.Ruby on Rails 實戰聖經 - 環境設定與Bundler

5.53 Ruby on Rails Interview Questions and Answers


上一篇
Ruby on Rails面試題挑戰 Day25 - 什麼是Active Job?
下一篇
Ruby on Rails面試題挑戰 Day27 - Rack是什麼?
系列文
Ruby on Rails面試題挑戰30

尚未有邦友留言

立即登入留言