閱讀手冊,深入探討 Gemfile
中所有可用選項及其使用方法。
Gemfiles 至少需要一個寶石來源,以 RubyGems 伺服器的 URL 形式呈現。執行 bundle init
,使用預設的 rubygems.org 來源產生 Gemfile。如果可以,請使用 https
,這樣您與 rubygems.org 伺服器的連線將透過 SSL 驗證。
source 'https://rubygems.org'
# Gems here
如果您想從其他來源取得寶石,請務必將額外來源包在區塊中。多個全域來源行有安全風險,不應使用,因為它們可能導致從非預期來源安裝寶石。
source 'https://rubygems.org'
# Gems here
source 'https://gems.example.com' do
# Gems from the alternative source here
end
有些寶石來源需要使用者名稱和密碼。使用 bundle config
設定需要任何來源的使用者名稱和密碼。必須在每個將安裝 Gemfile 的電腦上執行一次此命令,但這可避免憑證以純文字儲存在版本控制中。
$ bundle config https://gems.example.com/ user:password
對於某些來源,例如公司 Gemfury 帳戶,將憑證包含在 Gemfile 中作為來源 URL 的一部分可能更容易。
source "https://user:password@gems.example.com"
來源 URL 中的憑證將優先於使用 config
設定的憑證。宣告您需要的寶石,包括版本號碼。使用 RubyGems 支援的相同語法指定版本。
gem 'nokogiri'
gem 'rails', '5.0.0'
gem 'rack', '>=1.0'
gem 'thin', '~>1.1'
大多數版本規範符,例如 >= 1.0
,不言自明。規範符 ~>
有特殊的意義,最好的方式是透過範例說明。~> 2.0.3
與 >= 2.0.3
和 < 2.1
相同。~> 2.1
與 >= 2.1
和 < 3.0
相同。~> 2.2.beta
將符合預發布版本,例如 2.2.beta.12
。~> 0
與 >= 0.0
和 < 1.0
相同。
如果寶石的主檔案與寶石名稱不同,請指定如何需要它。
gem 'rack-cache', :require => 'rack/cache'
gem 'sqlite3'
指定 :require => false
以防止 bundler 需要寶石,但仍安裝它並維護相依性。
gem 'rspec', :require => false
gem 'sqlite3'
若要在 Gemfile
中載入 gem,您需要在應用程式中呼叫 Bundler.require
。
如果某些 gem 需要從私人 gem 伺服器擷取,則可為這些 gem 覆寫此預設來源。對於只包含單一 gem 的 gem 伺服器,最簡單的方法是在該 gem 上使用 :source
選項。
gem 'my_gem', '1.0', :source => 'https://gems.example.com'
如果多個 gem 來自同一個伺服器,您可以使用 source
區塊將它們分組在一起。
source 'https://gems.example.com' do
gem 'my_gem', '1.0'
gem 'another_gem', '1.2.1'
end
如上所述,gem 伺服器的憑證可以在 URL 中指定,或使用 bundle config
指定。只要儲存庫包含一個或多個有效的 gem,Git 儲存庫也是有效的 gem 來源。使用 :tag
、:branch
或 :ref
指定要簽出的內容。預設為 master
分支。
gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :branch => '1.4'
如果 Git 儲存庫不包含 .gemspec
檔案,bundler 會建立一個簡單的檔案,不包含任何相依性、可執行檔或 C 延伸模組。這可能適用於簡單的 gem,但可能不適用於其他 gem。如果沒有 .gemspec,您可能不應該從 Git 使用 gem。
如果您想直接從檔案系統使用未封裝的 gem,只需將 :path
選項設定為包含 gem 檔案的路徑即可。
gem 'extracted_library', :path => './vendor/extracted_library'
如果您想直接從檔案系統使用多個本機 gem,您可以將全域 path
選項設定為包含 gem 檔案的路徑。這將自動從子目錄載入 gemspec 檔案。
path 'components' do
gem 'admin_ui'
gem 'public_ui'
end
相依性可以放入群組中。群組可以在安裝時略過(使用 --without
),或一次全部載入(使用 Bundler.require
)。
gem 'wirble', :group => :development
gem 'debugger', :group => [:development, :test]
group :test do
gem 'rspec'
end
您可以在 Gemfile
中使用 ruby
指定 Ruby 的必要版本。如果在不同的 Ruby 版本上載入 Gemfile
,Bundler 會引發一個包含說明的例外狀況。
ruby '1.9.3'
這表示此應用程式相依於與 1.9.3 相容的 ABI 的 Ruby VM。如果版本檢查不符,Bundler 會引發例外。這將確保執行中的程式碼相符。您可以使用 :engine
和 :engine_version
選項更具體。
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'