DEV Community

loading...

You probably don't need a version manager for Ruby

dreikanter profile image Alex Musayev ・2 min read

This manual explains how to install a recent stable version of Ruby on Linux, without using rbenv or alternative version managers. My goal was to find a fast and reliable approach for provisioning expendable virtual machines for Rails development environment.

Basic assumptions:

  1. Installation speed matters.
  2. Only one version of Ruby is required system-wide.
  3. We're using Ubuntu, or any other Debian-based Linux distribution.

Step 1. Install prebuilt Ruby from Brightbox

Notice the dev package that should be installed in addition to the primary one. It is required to build native extensions for Ruby gems.

sudo apt-get install software-properties-common
sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt-get update
sudo apt-get install ruby2.6 ruby2.6-dev

Brightbox manual proposes a tool called ruby-switch that can help to switch between multiple Rubies on the same system. Since there will be only one of them, this step is unnecessary.

Step 2. Make gem work without sudo

By default, gem will try to install new gems to the system folder (e.g. /var/lib/gems/2.6.0), which is no good. Ruby version managers override this path with something under user home directory. But the same operation could be done manually. To permanently set target directory to the user home, and these lines to your ~/.bashrc:

export GEM_HOME=$HOME/.gem/ruby/2.6.0
export PATH=$HOME/.gem/ruby/2.6.0/bin:$PATH

Here is the most important thing you need to know about Ruby version managers to understand what exactly they do in system configuration:

"RubyGems' default local repository can be overridden with the GEM_PATH and GEM_HOME environment variables. GEM_HOME sets the default repository to install into. GEM_PATH allows multiple local repositories to be searched for gems" — rubygems.org

Step 3. Run a quick ad-hoc test

Log into the shell, and execute these commands to ensure gem and ruby binaries are available, gem home path is configured correctly, and native extensions could be built:

cd
gem install bundler rails
rails new testapp

Or just execute gem env to see the paths without installing anything.

Here is a full Vagrantfile to provision new Linux VM with Ruby development environment:

GitHub logo dreikanter / vagrant-rails

Vagrant configuration for Rails development environment

Vagrant configuration for Rails development environment

Will install:

  • Ubuntu Server (19.04 LTS)
  • Ruby (via ruby-install)
  • PostgreSQL
  • Redis
  • ElasticSearch
  • NodeJS
  • Yarn

Set up:

brew cask install virtualbox vagrant
vagrant up

Rails app setup after first log in (assuming Vagrant file is in you project root):

cd /app
bundle install
yarn install
bundle exec rails db:drop db:create db:migrate db:seed --trace

Running Rails app server:

rails s

Running webpack-dev-server:

bin/webpack-dev-server

Peace ✌️

Discussion

pic
Editor guide