Build Status OpenCollective OpenCollective Ansible Role Ansible Role Downloads

    What is rvm1-ansible?

    It is an Ansible role to install and manage ruby versions using rvm.

    Why should you use rvm?

    In production it's useful because compiling a new version of ruby can easily take upwards of 10 minutes. That's 10 minutes of your CPU being pegged at 100%.

    rvm has pre-compiled binaries for a lot of operating systems. That means you can install ruby in about 1 minute, even on a slow micro instance.

    This role even adds the ruby binaries to your system path when doing a system wide install. This allows you to access them as if they were installed without using a version manager while still benefiting from what rvm has to offer.


    $ ansible-galaxy install rvm.ruby

    Role variables

    Below is a list of default values that you can configure:

    # Install 1 or more versions of ruby
    # The last ruby listed will be set as the default ruby
      - 'ruby-2.3.1'
    # Install the bundler gem
    rvm1_bundler_install: True
    # Delete a specific version of ruby (ie. ruby-2.1.0)
    # Install path for rvm (defaults to single user)
    # NOTE: If you are doing a ROOT BASED INSTALL then make sure you
    #       set the install path to something like '/usr/local/rvm'
    rvm1_install_path: '~/.rvm'
    # Add or remove any install flags
    # NOTE: If you are doing a ROOT BASED INSTALL then
    #       make sure you REMOVE the --user-install flag below
    rvm1_install_flags: '--auto-dotfiles  --user-install'
    # Add additional ruby install flags
    # Set the owner for the rvm directory
    # NOTE: If you are doing a ROOT BASED INSTALL then
    #       make sure you set rvm1_user to 'root'
    rvm1_user: 'ubuntu'
    # URL for the latest installer script
    rvm1_rvm_latest_installer: ''
    # rvm version to use
    rvm1_rvm_version: 'stable'
    # Check and update rvm, disabling this will force rvm to never update
    rvm1_rvm_check_for_updates: True
    # GPG key verification, use an empty string if you want to skip this
    # Note: Unless you know what you're doing, just keep it as is
    #           Identity proof:
    #           PGP message:
    rvm1_gpg_keys: '409B6B1796C275462A1703113804BB82D39DC0E3'
    # The GPG key server
    rvm1_gpg_key_server: 'hkp://'
    # autolib mode, see
    rvm1_autolib_mode: 3
    # Symlink binaries to system path
    rvm1_symlink: true

    Example playbooks

    - name: Configure servers with ruby support for single user
      hosts: all
        - { role: rvm.ruby,
            tags: ruby,
            rvm1_rubies: ['ruby-2.3.1'],
            rvm1_user: 'ubuntu'

    If you need to pass a list of ruby versions, pass it in an array like so.

    - name: Configure servers with ruby support system wide
      hosts: all
        - { role: rvm.ruby,
            tags: ruby,
            become: yes,
            rvm1_rubies: ['ruby-2.2.5','ruby-2.3.1'],
            rvm1_install_flags: '--auto-dotfiles',     # Remove --user-install from defaults
            rvm1_install_path: /usr/local/rvm,         # Set to system location
            rvm1_user: root                            # Need root account to access system location

    rvm_rubies must be specified via ruby-x.x.x so that if you want ruby 2.2.5, you will need to pass in an array rvm_rubies: ['ruby-2.2.5']

    System wide installation

    The above example would setup ruby system wide. It's very important that you run the play as root because it will need to write to a system location specified by rvm1_install_path

    To the same user as ansible_user

    In this case, just overwrite rvm_install_path and by default is set the --user-install flag:

    rvm1_install_flags: '--auto-dotfiles --user-install'
    rvm1_install_path: '/home/{{ ansible_user }}/.rvm'

    To a user that is not ansible_user

    You will need root access here because you will be writing outside the ansible user's home directory. Other than that it's the same as above, except you will supply a different user account:

    rvm1_install_flags: '--auto-dotfiles --user-install'
    rvm1_install_path: '/home/someuser/.rvm'

    Quick notes about rvm1_user

    In some cases you may want the rvm folder and its files to be owned by a specific user instead of root. Simply set rvm1_user: 'foo' and when ruby gets installed it will ensure that foo owns the rvm directory.

    This would use Ansible's become under the hood. In case of failures (e.g. Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user), check for details and possible solutions.

    Upgrading and removing old versions of ruby

    A common work flow for upgrading your ruby version would be:

    1. Install the new version
    2. Run your application role so that bundle install re-installs your gems
    3. Delete the previous version of ruby

    Leverage ansible's --extra-vars

    Just add --extra-vars 'rvm1_delete_ruby=ruby-2.1.0' to the end of your play book command and that version will be removed.


    Potentially, any Linux/Unix system supported by Ansible and satisfying the RVM prerequisites should work.

    Compatibility with Linux distributions based on Debian, Ubuntu or Redhat families is actively tested.

    The continuous integration setup of this project currently covers following platforms:

    • CentOS 6, 7 and 8
    • Debian 8, 9 and 10
    • Ubuntu 14.04, 16.04, 18.04 and 20.04

    Ansible galaxy

    You can find it on the official ansible galaxy if you want to rate it.



    Become a backer and support us with a small monthly donation to help us continue our activities.

    Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer Backer


    Become a sponsor and get your logo on our README on Github with a link to your site.

    Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor Sponsor




    The official ansible RVM role to install and manage your Ruby versions.

    🚀 Github 镜像仓库 🚀


    发行版本 31



    贡献者 50



    • Dockerfile 69.5 %
    • Shell 30.5 %