与 gem 类似,开发人员可以设置对 Ruby 的依赖关系。如果依赖 Ruby VM 中的特定功能,这将使您的应用程序更快地失败。这样,部署服务器上的 Ruby VM 将与您的本地 VM 相匹配。您可以通过在 Gemfile
中使用 ruby
指令来实现这一点。
ruby 'RUBY_VERSION', :engine => 'ENGINE', :engine_version => 'ENGINE_VERSION',
:patchlevel => 'RUBY_PATCHLEVEL'
如果您想使用 JRuby 1.6.7 和 Ruby 1.9.3,只需执行以下操作:
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
。使用 platform
命令和 --ruby
标志,您可以查看 Gemfile
中指定的 ruby
指令。
ruby 1.9.3 (jruby 1.6.7)
在 ruby
指令中,:patchlevel
是可选的,因为补丁级别版本通常是兼容的,并且包含重要的安全修复。补丁级别选项检查 RUBY_PATCHLEVEL
常量,如果未指定,则 bundler 将忽略它。也可以使用版本运算符来指定 Ruby 版本。支持的版本运算符集与 Rubygems(gem
版本运算符)相同。(例如 <
、>
、<=
、>=
、~>
、=
)
ruby '~> 2.3.0'