開発者は、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'