與寶石類似,開發人員可以設定對 Ruby 的依賴性。這樣可以讓您的應用程式在依賴 Ruby VM 中的特定功能時更快地發生錯誤。這樣,部署伺服器上的 Ruby VM 將會與您的本機 Ruby VM 相符。您可以使用 Gemfile 中的 ruby 指令來執行此操作
ruby 'RUBY_VERSION', :engine => 'ENGINE', :engine_version => 'ENGINE_VERSION',
:patchlevel => 'RUBY_PATCHLEVEL'
如果您想使用 Ruby 1.9.3 使用 JRuby 1.6.7,您只需執行下列操作
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'
也可以透過執行下列操作來限制 Ruby 修補程式等級
ruby '1.9.3', :patchlevel => '448'
如果您希望從版本檔案 (例如 .ruby-version) 中衍生您的 Ruby 版本,您可以改用 file 選項。
ruby file: ".ruby-version"
版本檔案應符合下列任何格式
3.1.2
(.ruby-version
)ruby 3.1.2
(.tool-versions
)Bundler 會針對目前執行的 Ruby VM 進行檢查,以確保它與 Gemfile 中指定的內容相符。如果兩者不符,Bundler 會引發一個例外狀況,說明不符的部分。
Your Ruby version is 1.8.7, but your Gemfile specified 1.9.3
:engine
和 :engine_version
都是選用的。當省略這些選項時,表示應用程式與特定 Ruby ABI 相容,但引擎無關緊要。當使用 :engine
時,也必須指定 :engine_version
。使用帶有 --ruby
旗標的 platform 指令,您可以看到 Gemfile 中指定的 ruby
指令為何。
ruby 1.9.3 (jruby 1.6.7)
在 ruby
指令中,:patchlevel
是選用的,因為修補程式版本通常相容,且包含重要的安全性修正。patchlevel 選項會檢查 RUBY_PATCHLEVEL
常數,如果未指定,Bundler 會直接忽略它。指定 Ruby 版本的版本運算子也可用。支援的版本運算子集與 Rubygems (gem
版本運算子) 相同。(例如 <
、>
、<=
、>=
、~>
、=
)
ruby '~> 2.3.0'