simultenious rails versions on single machine

hi all,    can i install different rails versions on single machine like rails 1.2.2, 1.2.6, 2.0,2.1 etc to workout different applications in different rails versions. if yes, how? currently i've rails 1.2.6 and if i run command as "gem install rails", will it overwrite my current rails version? what should i do to keep older and new both versions at the same time?

-DP

The command "gem install rails" will overwrite some commands, in particular the rails command in you path, but the rails command is also part of the gem. Your current rails command will be 1) in your path and 2) in some location like /usr/local/lib/ruby/gems/1.8/gems/ rails-*/bin where the * stands for the version of rails.

Just move rails into the "/vendor" directory of each project using
subversion (old versions) or git (newer versions).

For example, I use rails 1.2.3 for zena cms so I use (in the vendor
directory): # svn export -r 6633 http://svn.rubyonrails.org/rails/trunk/ rails

Gaspard

And if you need to run the actuals rails executable you can specify the version you want eg rails _1.2.6_ to run version 1.2.6 (assuming you have the corresponding gem)

Dhaval Phansalkar wrote:

hi,    thanks for reply. wt i was thinking that i could install all those versions on single machine and just change RAILS_GEM_VERSION in config/environment.rb file. can this be done?

Hi Dhaval,

Yes, it can be done. When you install a gem, you can pass it -v to tell it what version you want. Without -v, the latest version is installed. So install rails 2.1 _right now_, you could do

gem install rails

But if you want to install 1.2.6, you would do

gem install rails -v 1.2.6

gem actually has pretty good help.

gem help commands

is a good place to start. Then you can get specific with

gem help install

Peace, Phillip

Ar Chron wrote:

Dhaval Phansalkar wrote:

hi all,    can i install different rails versions on single machine like rails 1.2.2, 1.2.6, 2.0,2.1 etc to workout different applications in different rails versions. if yes, how?

Freezing the appropriate Rails gems into your application(s) is your friend in this case...

rake rails:freeze:gems

although I don't know if that takes an argument for version or not.

"Proof of this last statement is left as an exercise for the reader" hehe

thanks for the reply people. i thought this task is easy but it seems a bit tricky ;).

@Phillip    i checked the help. thanks for the info :slight_smile:

@Ar Chron    freezing rails seems to be a good option. i tried it on a sample application and it worked fine. but i've a question here.if i freez my appl to the current rails version(1.2.6) and install 2.0. later on,just in case, if i want to go back to the previous ver i.e. 1.2.6, i'll do gem install "rails -v1.2.6". in that case, will i have to install all other gems also like hpricot,mongrel etc?

-DP

You can can get all parts of rails (activerecord, actionpack, etc) using subversion (http://subversion.tigris.org) or git (forgot website name). The command using subversion would be:

cd vendor

svn export -r 6633 http://svn.rubyonrails.org/rails/trunk/ rails

Replace “6633” by the revision number containing the versions that you want. Doing this, you get to use specific copies for your app, without using the gems for rails stuff. You can use the “previous change”, “next change” on the old trac browser to find the revision you need (if you know rails version): http://dev.rubyonrails.org/changeset/7843/trunk/railties/lib/rails/version.rb

You end up with a folder containing:

your app

± app

± … ± vendor

± rails

± actionmailer

± actionpack ± actionwebservice ± activerecord ± …

Gaspard

gem install rails -v=<%=version you want to install%>

eg: gem install rails -v=1.2.5

will install the rails version 1.2.5 for you. Infact this option is available while installing any gems. With the option "-v=" will always install the latest version of and gem.

You can freeze a different version of rails for an different project. In config/environment.rb specify which rails version you wan to use for that particular project.