Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite gemfile_ruby guide from HAML to Markdown #1058

Merged
merged 1 commit into from
Jan 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 0 additions & 59 deletions source/guides/gemfile_ruby.html.haml

This file was deleted.

50 changes: 50 additions & 0 deletions source/guides/gemfile_ruby.html.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## 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 '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
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
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)
~~~

<a href="/man/bundle-platform.1.html" class="btn btn-primary">Learn More: bundle platform</a>

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
ruby '~> 2.3.0'
~~~

<a href="https://guides.rubygems.org/patterns/#declaring-dependencies" class="btn btn-primary">Learn More: Version Operators</a>