Rails 3.03 and Rails 2.38 -- can they work together? - ruby-on-rails

Is there a way to install a Rails 2.3.10 app if I have Rails 3.0.3 installed on my machine?
for example i'd like to start my server with ruby script/server instead of rails server.
thx

Two main ways:
Bundler: you can create a Gemfile and use bundler to silo the gems for each of your installations. The drawback to this one is that you'll probably have to use "bundle exec command" whenever you want to run a command for the version of rails you're using, such as spec or cucumber
RVM: using RVM you can use not only different versions of Ruby, but also separate gemsets within a version of Ruby. I personally use this method most of the time, creating a gemset called "rails3" and "rails2" (or sometimes I use a gemset for the application) with the relevant gem versions in it. You can have as many gemsets as you want and switch between them. Stick a .rvmrc file in the root of your application, and rvm will switch the version of ruby and your gemset for you automatically.

Related

Ruby On Rails 3.2.13 - Using Different Gemsets For Rails Applications

I currently have several Rails applications running version 3.2.13 that use Ruby 1.9.3. I plan to eventually upgrade my current applications to Rails 4.0 then upgrade Ruby to 2.0. I need to time the conversion to Ruby 2.0 carefully since from my understanding Phusion Passenger will only handle one version of Ruby without some nose bleeding solutions which I do not plan to attempt to implement at this point.
I currently use one gemset for all my Rails applications. I would like to convert my Rails applications one by one from 3.2.13 to the current version of Rails 4.0 at some point. When I have tried to update one of my applications to a newer version of Rails I was told I had to do a update rails command.
What I want to do is to be able to run some of my applications using Rails 3.2.13 and others using Rails 4.0 until I am sure they will all run properly under Rails 4.0. Once I do this I will review the differences between Ruby 1.9.3 (if any) and upgrade all of them to use Rails 2.0. At this point I understand that I would just create the gemset for 2.0.0 or whatever the latest stable version of Ruby 2 is.
I have done web searches and checked the RVM website. I understand how the gemsets are assigned to the version of Ruby you want to run. However I'm not seeing anything about using gemsets with the same version of Ruby but using different versions of Rails or other combinations of gems on the same machine for different applications. Can this be done?
Any help would be appreciated.
Take a closer look! ;)
First, create a new gemset with a name corresponding to your project
https://rvm.io/gemsets/creating/
ex: rvm gemset create project_name
Then create/edit .rvmrc file in project directory: rvm use 1.9.3#project_name
One pitfall is that if you execute following commands
cd some_project
cd ../other_project
and other_project doesn't have gemset specified you'll stay in some_project gemset. To avoid that you can create .rvmrc file with default gemset in your "projects" directory (if you have one)
Project Folder
|___Gemfile
|__.ruby-gemset
|__.ruby-version
Gemfile with all the required gems mention in your project folder
.ruby-gemset should have gem set name like sample-gemset
.ruby-version file should have specific ruby version (e.g 2.0)
rvm gemset list
it will show gem set created with sample-gemset and do the
bundle install
which will install all the specific gems for this project under sample-gemset,
same you can do for other project to create other gem set, in this way you can maintain different rails/gems and ruby version for different projects with rvm.
Your Gemfile.lock nails down which version of every gem you use - you don't need to worry about gemsets.
bundle install will always install the correct versions and your app will always use the versions in Gemfile.lock, even if there are other versions floating around

RVM per project gemsets

I'm having difficulty understanding RVM per project gemsets. I've installed RVM and the 1.9.2 and 1.8.7 rubies, as per http://beginrescueend.com/interpreters/ruby/ , and when I want to start a new project, I've been
cd ~/Code
rvm use 1.9.2
rvm gemset create test1
rvm gemset use test1
gem install rails
But this takes a long time! (installing rails). I then rails new test1; cd test1
I'm really unsure with the correct workflow. If I'm making a new app to test in, I don't want to have to wait for rails to install.
It seems from http://beginrescueend.com/gemsets/basics/ that I can create a rails gemset, but then how do I create a per project gemset?
Edit:
If I'm going to using multiple ruby/rails versions, should I create a gemset, say 1.9.2#rails313, then rails new blah, put 1.9.2#rails313 in blah/.rvmrc , and if I need to later on, create a blah gemset?
A gemset is just a container you can use to keep gems separate from each other.
The Big Idea: creating a gemset per project allows you to change gems (and gem versions) for one project without breaking all your other projects. Each project need only worry about its own gems. This is a Good Idea, and the wait time for installing large gems like Rails is usually worth it.
That said, if you're going to use the same version of Rails across all your projects and want to save time, you can install rails (and maybe rake as well) in the 'global' gemset - these gems are available in all gemsets for that version of ruby.
Assuming you already have a test1 gemset:
$ rvm gemset use global
$ gem install rails
$ gem install rake
$ rvm gemset use test1
$ rails test1
Once I wrote a simple blog post on how to use RVM with gem sets, this might be helpful to you.
UPDATE: As the link above is dead, I believe it is in another location here.

How can I keep my Ruby Gems the same on several servers?

I have several servers for development, staging, testing and production and want to keep my Ruby version and Gem versions in sync between the different machines -- what's the best way to do this?
If you're using Rails 3, you can just use the Gemfile, and bundler, and when you do a "bundle update" on whatever machine you're on, it will automatically install the correct versions of Gems for that user account.
You should use RVM to manage your Ruby versions and to keep the Gems for different Ruby versions separate from each other.
You should also create a "gemset" for your Rails application, to make sure that the Gems installed there are not modified from another Rails application you might use or develop on the same machine.
http://beginrescueend.com/
http://railscasts.com/episodes/200-rails-3-beta-and-rvm
rvm is the best option to manage ruby versions
However I am not sure if you really want to change ruby version often.
bundler & Gemfile is great way to handle gem versions
Track you Gemfile && Gemfile.lock files in git(or other cvs) tree, and run bundle install on change
You can also, in the event you have more gems in a gemset than just what's in your Gemfile, do a
rvm gemset export gemsetname.gems
And then on the other machine you would do a
rvm gemset import gemsetname.gems
You can even do it as
rvm x.x.x#mygemset exec rvm gemset export mygemset.gems
so you don't have to go directly into your gemset. And then on the new machine,
rvm --create use x.x.x#mygemset && rvm gemset import mygemset.gems
which will create and then populate your mygemset gem set.

Rails 3.0 bundle

"rails new app" command is generating two rails applications namely "new" and "app" but both of them doesn't contains Gemfile, due to which I am not being able to run "bundle" command by changing current directory to either of the applications. I am using "rvm use 1.9.2" command to have ruby 1.9.2 and the more "gem list" command also shows bundle and bundler.
so any help .
You're probably using a old Rails2 "rails" binary.
Give rails --version a try.
If you have multiple versions of Rails installed you'll have trouble with which binary is being used.
Check if you have both 2.3.x and 3.0.x installed by running gem list.
If you need both versions, you'll want to create gemsets for each rails version in rvm. Then you do something like rvm use 1.9.2#rails2 or rvm use 1.9.2#rails3 to specify which gemset you want to use.

Guidance in setting up some RVM environments

So I want to create environments for rails 3 and rails 2.1.1
How do I do this?
Where do I look for the various versions of rails?
I get an error when I try:
rvm 1.9.2-head
ruby ruby-1.9.2-head is not installed.
I just followed what I read on: http://rvm.beginrescueend.com/gemsets/creating/
Yes, gemsets are ideal for this. I use gemsets for this too.
First you have to create the gemset:
rvm gemset create your-project-name
then use the gemset:
rvm gemset use your-project-name
When you do this, all your gems are unreachable, you can get them back by using rvm gemset use, which will return to the default gemset (unnamed).
Inside your gemset, you will have to reinstall all needed gems. If you are using bundler, it is as simple as
bundle install
The advantage of using gemsets is that your gems are cleanly seperated. For instance, i ran into trouble with spec/rspec scripts when using both rails2 and rails3 together. With gemsets i no longer have any problems. Using an .rvmrc file per project, even the selection of the correct gemset is automatic, and i can configure my project in rubymine to use the correct gemset too. Awesome :)
Rvm is for different versions of Ruby not rails. You can potentially have every version of rails installed on one version of ruby. The application itself will in it's Gemfile or config specify what version of rails you are using.

Resources