Docs header transparent bg

Specifying a Ruby Version

Like gems, developers can setup a dependency on Ruby. This makes your app fail faster in case you depend on specific features in a Ruby VM. This way, the Ruby VM on your deployment server will match your local one. You can do this by using the ruby directive in the Gemfile:
ruby 'RUBY_VERSION', :engine => 'ENGINE', :engine_version => 'ENGINE_VERSION',
  :patchlevel => 'RUBY_PATCHLEVEL'

If you wanted to use JRuby 1.6.7 using Ruby 1.9.3, you would simply do the following:
ruby '1.9.3', :engine => 'jruby', :engine_version => '1.6.7'

It's also possible to restrict the patchlevel of the Ruby used by doing the following:
ruby '1.9.3', :patchlevel => '448'

Bundler will make checks against the current running Ruby VM to make sure it matches what is specified in the Gemfile. If things don't match, Bundler will raise an Exception explaining what doesn't match.
Your Ruby version is 1.8.7, but your Gemfile specified 1.9.3

Both :engine and :engine_version are optional. When these options are omitted, this means the app is compatible with a particular Ruby ABI but the engine is irrelevant. When :engine is used, :engine_version must also be specified.
Using the platform command with the --ruby flag, you can see what ruby directive is specified in the Gemfile.
ruby 1.9.3 (jruby 1.6.7)
Learn More: bundle platform
In the ruby directive, :patchlevel is optional, as patchlevel releases are usually compatible and include important security fixes. The patchlevel option checks the RUBY_PATCHLEVEL constant, and if not specified then bundler will simply ignore it.
Version operators for specifying a Ruby version are also available. The set of supported version operators is that of Rubygems (gem version operators). (ie. <, >, <=, >=, ~>, =)
ruby '~> 2.3.0'
Learn More: Version Operators
Edit this document on GitHub if you caught an error or noticed something was missing.