開発者は、gemと同様に、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'