What is Gemfile and Gemfile.lock?
Gemfile和Gemfile.lock是什麼?
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檔案是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
3.為你自己學 Ruby on Rails - 使用套件(Gem)讓開發更有效率
4.Ruby on Rails 實戰聖經 - 環境設定與Bundler
5.53 Ruby on Rails Interview Questions and Answers