Change rails version used by rvm

How can I specify rvm to use rails version 3.2.14 ?

rvm has nothing to do with rails. rvm is used to manage multiple ruby installations. And each of your ruby installations can be associated with multiple gemsets. For instance, say you have ruby 1.9.3 installed and you created two gemsets for ruby 1.9.3: gemsetA and gemsetB. If you tell rvm to use ruby 1.9.3 with gemsetA, that means:

  1. Your ruby programs will be executed by ruby 1.9.3.

  2. Your ruby programs can require any gem in gemsetA (which then allows your program to use the methods (or classes) defined in gemsetA), but any gems in gemsetB cannot be seen by your ruby program.

Here's a concrete example:

~$ rvm list

rvm rubies

   ruby-1.8.7-p370 [ i686 ]
 * ruby-1.9.3-p194 [ x86_64 ]
=> ruby-2.0.0-p0 [ x86_64 ]
   ruby-2.0.0-p247 [ x86_64 ]

# => - current
# =* - current && default
#  * - default


~$ rvm use 1.9.3-p194
Using /Users/7stud/.rvm/gems/ruby-1.9.3-p194

.

~$ rvm gemset list   (This lists only the gemsets for the current ruby version)

gemsets for ruby-1.9.3-p194 (found in /Users/7stud/.rvm/gems/ruby-1.9.3-p194)
=> (default)
   global
   programming
   rails3tutorial
   rails4

~$ rvm gemset use programming
Using ruby-1.9.3-p194 with gemset programming

After I do that, my ruby programs will be executed by ruby 1.9.3 and any gems in the programming gemset can be required into my ruby program. You can use a shortcut to perform both those commands in one step:

rvm use ruby 1.9.3-p194@programming

You just combine the ruby version and the gemset with an '@' between them.

But when I type rails -v I get this :

$ rails -v
Rails 4.0.0

That's because the current gemset contains the gem for rails 4.0.0. If you want to see $ rails -v output Rails 3.2.14, then you need to tell rvm to switch to a gemset that contains the rails 3.2.14 gem.

However, you can make rvm automatically switch to the proper rails version and gemset for your rails project. In your Gemfile, add a comment after the ruby version:

ruby '2.0.0'
#ruby-gemset=railstutorial4_gems

Then whenever you switch to the directory containing your rails project, rvm will automatically switch the current ruby to ruby 2.0.0 and the current gemset to railstutorial4_gems. If you change directories out of your rails app, rvm will change the current ruby and the current gemset back to what they were.

I'm just a rails beginner, but here are the steps I use to create a new project, which are straight out of the railstutorial book (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book)

1)

.../rails_projects$ rvm use <ruby version here>@<new gemset name here> --create 

e.g.

.../rails_projects$ rvm use ruby-1.9.3-p194@myapp_gemset --create

2)

.../rails_projects$ gem install rails --version 3.2.14

Because the current gemset is the myapp gemset, that command installs the rails 3.2.14 gem into the myapp gemset.

3)

.../rails_projects$ rails new myapp
.../rails_projects$ cd myapp

The current gemset is still myapp_gemset.

4)

.../rails_projects/myapp$ rails -v
Rails 3.2.14

In case anyone was wondering what the heck the following two gemsets are all about:

gemsets for ruby-1.9.3-p194 (found in /Users/7stud/.rvm/gems/ruby-1.9.3-p194)

=> (default)
   global

rvm creates those two gemsets for every ruby version you install. After you install a ruby version, if you don't create a gemset yourself for that ruby version, and you install a gem, then the gem goes into the (default) gemset. And, if you want all your gemsets to contain a certain gem, you can switch to the global gemset and install the gem there.

Update: -------

To maintain compatibility with other ruby version managers, you can specify the ruby version and gemset name for your project in a different file rather than in the Gemfile:

$ cd ~/rails_projects/myapp

~/rails_projects/myapp$ echo 2.0.0 > .ruby-version
~/rails_projects/myapp$ echo myapp_gemset > .ruby-gemset

You'll still get the same automatic ruby version and gemset switching when you cd into your project's directory. See the rvm docs here.


You can create a new rails app with a particular rails version, like this:

rails _3.2.14_ new myApp

the path you found /Users/polonium/.rvm/rubies/ruby-2.0.0-p247/bin/rails is not proper path you would found in standard rvm installation while doing proper use of rvm, what you would see should be: /Users/polonium/.rvm/gems/ruby-2.0.0-p247/bin/rails

to get it working properly try this flow:

rvm use 2.0.0
rvm gemset empty
rvm use @rails3 --create 
gem install rails -v "~>3.2"
rvm use @rails4 --create
gem install rails -v "~>4"

this way now you can switch between this two rails installations with:

rvm use 2.0.0@rails3
rails -v             # rails 3.2...
rvm use 2.0.0@rails4
rails -v             # rails 4.0...