Table of contents

Add a new Ruby version

The Ruby language is a core part of GOV.UK - most of our applications are written in it.

Managing different versions of Ruby

Each app can use whatever version of Ruby it wants. We manage this with rbenv.

Setting up rbenv

We set up rbenv differently depending on what’s going on:

  • Interactive login shells: /etc/profile.d/rbenv.sh sets up rbenv
  • Applications: govuk_setenv and a .ruby-version in the app directory set up rbenv
  • Deployment: Capistrano uses a non -login shell so we set default_environment (commit)
  • Testing: Jenkins uses a non-login shell so we add /usr/lib/rbenv/shims to the PATH
  • Cronjobs: some cronjobs start with /bin/bash -l -c which runs a login shell

Add a new Ruby version in puppet

Build a package using fpm and make it available using our aptly repository.

The package name includes the version of Ruby (eg rbenv-ruby-2.3.1) because we need to install multiple versions of Ruby at the same time.

Once it’s available as a package you can install it everywhere using Puppet. Machines only run apt-get update periodically so it might take a little time for the package to become available.

Testing whether a version of Ruby is in use

You can use the Fabric task rbenv.version_in_use to find out which applications are using a specific version of Ruby on GOV.UK. For example:

fab production puppet_class:govuk_rbenv::all rbenv.version_in_use:2.3.1
This page is owned by #2ndline and needs to be reviewed