36

I'm learning rails from different books that use different versions of both ruby and rails. Right now I have ruby 1.87 installed on my Mac OS X Snow Leopard (in /usr/bin), but need to also use ruby 1.9 for a different rails application.

Can anyone tell me how to make this work? I'm new to this, so as many instructions as possible would be greatly appreciated.

2

4 Answers 4

49

There are two major Ruby version managers out there from which you can choose:

These allow you to keep multiple versions of Ruby on the same system. Once you've installed a version manager, and installed your own Ruby version, you won't mess with your system's Ruby and its Gems, which is the greatest benefit. No more sudo! No more permissions errors and Gem conflicts.

Which one should I choose?

Both do the same thing, but they follow different philosophies. The choice is up to you.

I personally recommend rbenv for its simplicity. I've been using it for years and it has always worked well.

How do I install them?

If you choose rbenv:

If you choose RVM:

  • Use the secure installation method
  • Read the installation instructions — you probably want the single-user configuration
  • Use rvm list known to list available Rubies and then run rvm install x.x.x to install a specific version.
  • Use rvm use x.x.x --default to change your default Ruby
10
  • 1
    See also rbenv. Commented Sep 27, 2011 at 17:44
  • @grawity Why not post another answer? Good to have alternatives, haven't really looked into rbenv yet.
    – slhck
    Commented Sep 27, 2011 at 17:47
  • thanks so much, does it also help switch between versions of Rails? different books I'm using employ 3.05 (I think) and 3.1 and it's causing problems...
    – Michael
    Commented Sep 27, 2011 at 18:14
  • I tried the install line you wrote (and which is also on rvm site) and got an error message: bash: line 152: git: command not found bash: line 154: git: command not found
    – Michael
    Commented Sep 27, 2011 at 18:17
  • Ah, you need git, of course. Sorry, I forgot that. You can install Git with the OS X installer (just select the latest version at the top).
    – slhck
    Commented Sep 27, 2011 at 18:22
9

I think rbenv deserves at least its own answer.

There is a constant battle between fans of rbenv and those of RVM but I personally like rbenv a lot more. As the Sam Stephenson (the author) states, rbenv it solely concerned with switching Ruby versions (as opposed to RVM, which does a lot more).

On OS X, it's especially easy to give it a try. Just follow the excellent installation instructions on the Github page (if you have Homebrew installed, it's basically just a brew install rbenv ruby-build).

As for switching Rails versions, I once wrote an article about that which my be of interest for you.

3
  • 2
    Here's a brief description of rbenv's author on the main differences with RVM and reasons to choose rbenv. The simplicity of rbenv was the main reason for me to migrate away from RVM. Managing sets of application-specific gems is IMO better done with Bundler - you don't need a Ruby version manager for that. Commented May 31, 2015 at 13:32
  • Exactly – managing sets of application-specific gems is Bundler's job. I have never been a fan of gemsets tied to version managers. Commented Jun 16, 2015 at 20:36
  • on OSX you don't really need it, as you can install different versions of Ruby with brew, and add in the path the one that you want to use
    – maxadamo
    Commented Apr 22, 2023 at 11:41
1

Assuming you have installed the rbenv ruby version: run,

rbenv init

Then;

eval "$(rbenv init - zsh)" 

To confirm the switched version, run;

which ruby

It should be something like;

/Users/MacbookAir/.rbenv/shims/ruby
1

This is what worked for me, I don't have sudo:

#!/usr/bin/env bash

ruby -v
if ! command -v ruby &> /dev/null
then
    echo "Going to try to install ruby (ideally 3.1.2)"
    # - install rebenv (following ruby-build really is needed eventhough it doesn't look like it)
    mkdir -p ~/.rbenv
    cd ~/.rbenv
    git clone https://github.com/rbenv/rbenv.git .
    # if $HOME/.rbenv/bin not in path append it, otherwise don't change it
    echo $PATH | tr ':' '\n' | awk '{print "  " $0}';
    if [[ ":$PATH:" != *":$HOME/.rbenv/bin:"* ]]; then
      echo "might want to put $HOME/.rbenv/bin in your path"
      export PATH="$HOME/.rbenv/bin:$PATH"
#      echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc.lfs
    fi
    eval "$(rbenv init -)"
    rbenv -v

    # - install ruby-build, odd, this really is needed for ruby to install despite it not looking like ruby build is need at the bottom
    mkdir -p ~/.ruby-build
    cd ~/.ruby-build
    git clone https://github.com/rbenv/ruby-build.git .
    # if $HOME/.ruby-build/bin not in path append it, otherwise don't change it
    echo $PATH | tr ':' '\n' | awk '{print "  " $0}';
    if [[ $PATH != *"$HOME/.ruby-build/bin"* ]]; then
      echo "might want to put $HOME/.ruby-build/bin in your path"
      export PATH="$HOME/.ruby-build/bin:$PATH"
#      echo 'export PATH="$HOME/.ruby-build/bin:$PATH"' >> ~/.bashrc.lfs
    fi
    ruby-build --version

    # - install ruby without sudo -- using rbenv
    mkdir -p ~/.local
    #    ruby-build 3.1.2 ~/.local/
    rbenv install 3.1.2
    rbenv global 3.1.2
fi
ruby -v

# - wontfix: above worked but what was ruby's official way to do this? doesn't matter but answer might be here some day: https://discuss.rubyonrails.org/t/what-is-the-official-way-to-install-ruby-ideally-3-1-2-on-ubuntu/82226

# -old prover bot ignore doesn't work on SNAP
# Proverbot's way to install ruby
#    # First, install Ruby, as that is for some reason required to build the "system" project
#    git clone https://github.com/rbenv/ruby-build.git ~/ruby-build
#    mkdir -p ~/.local
#    PREFIX=~/.local ./ruby-build/install.sh
#    ~/.local/ruby-build 3.1.2 ~/.local/
# ref: https://superuser.com/questions/340490/how-to-install-and-use-different-versions-of-ruby/1756372#1756372

see this for more general answers: https://askubuntu.com/questions/339/how-can-i-install-a-package-without-root-access

related: https://stackoverflow.com/questions/75330125/why-would-only-using-rbenv-and-ruby-build-work-to-install-ruby

2

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .