If you're running Ubuntu 9.10 and want to install Ruby on Rails I've put together a quick tutorial for you. Not tremendously much has changed since the last tutorial for Jaunty Jackalope. Unicorn is out and while I think it's nifty, I'm going to wait a little while before playing with it. For now my money is still on Phusion Passenger as being the right tool for the job. If all that seems fine, let's get to the details.Step 1: As usual, the first thing we'll want to do is make sure your version of Ubuntu is up to date.:
sudo apt-get update
sudo apt-get dist-upgrade
If you see this warning it means we have a little more work to do.
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Let's go ahead and set your locale now. (I'm using en-US in this example.. feel free to substitute for your region)
sudo locale-gen en_US.UTF-8
sudo /usr/sbin/update-locale LANG=en_US.UTF-8
Step 2: We'll be installing some software that needs to be built so we'll need to get packages required for compiling. With Ubuntu, you can type this single command and get everything you need:
sudo apt-get install build-essential
Step 3: Once you've got the tools, it's time to install MySQL and Ruby. If you're using SQLite you may not need all this stuff. Otherwise, just copy and paste this command into your terminal if you're in a hurry. As of Karmic Koala, we're using MySQL 5.1:
sudo apt-get install ruby ri rdoc mysql-server libmysql-ruby ruby1.8-dev irb1.8 libdbd-mysql-perl libdbi-perl libmysql-ruby1.8 libmysqlclient15off libnet-daemon-perl libplrpc-perl libreadline-ruby1.8 libruby1.8 mysql-client-5.1 mysql-common mysql-server-5.1 rdoc1.8 ri1.8 ruby1.8 irb libopenssl-ruby libopenssl-ruby1.8 libhtml-template-perl mysql-server-core-5.1 libmysqlclient16 libreadline5 psmisc
If you hadn't previously installed MySQL you'll be asked to set a root password. You don't have to, of course (it will bug you no fewer than 3 times if you opt not to) but I strongly recommend it. You'll need this password when you populate your rails config/database.yml file so be sure not to forget it.
Step 4: Grab the latest ruby gems and install them. As always be sure to check rubyforge.org to make sure you're grabbing the latest one. As of this writing it's 1.3.5 but it never hurts to confirm.
wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
tar xvzf rubygems-1.3.5.tgz
cd rubygems-1.3.5
sudo ruby setup.rb
Once it's done you can remove the .tgz file and erase the rubygems-1.3.5 directory too.
Step 5: On the command line, type gem -v. if you get this message we need to make some symlinks:
The program 'gem' can be found in the following packages:
* rubygems1.8
* rubygems1.9
Try: sudo apt-get install
-bash: gem: command not found
Let's create those symlinks now:
sudo ln -s /usr/bin/gem1.8 /usr/local/bin/gem
sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby
sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc
sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri
sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb
Step 6: Install Ruby on Rails! You can leave off the --no-rdoc and --no-ri switches if you're on a machine with plenty of ram. But just in case you've got a more modest setup (say 256MB or less) I'd just use the following:
sudo gem install rails --no-rdoc --no-ri
If you're just doing local development then you are basically done. You may want to install additional gems. If you want to deploy Ruby on Rails onto a server then it's time to setup Nginx and Phusion.
Step 7: As I mentioned earlier, Unicorn may be the new hotness but I'm going to wait a while before I put my customers on that stack. The folks responsible for Phusion Passenger(Hongli Lai & Ninh Bui) are incredibly smart and I think they'll look at Unicorn and make some improvements to Phusion to eek out even more performance. The short of it is that I'm still a big believer in Phusion so I'm going to install it for production and recommend that you do too:
sudo apt-get install libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base
Step 8: We're going to create a directory for your application. In anticipation of Capistrano, let's put it in /var/www/myapp/current. Swap out the myapp with anything you like.
sudo mkdir -p /var/www/myapp/current
If you've got an existing Rails application, it doesn't hurt to populate that directory now. Just make sure that the root to the public directory is /var/www/myapp/current/public. Don't forget to chown it for www-data:
sudo chown -R www-data:www-data /var/www/myapp/current/
Step 9: Now it's time to install Phusion Passenger and let it do it's magic.
sudo gem install passenger
sudo passenger-install-nginx-module
At this point you'll be greeted with two options. The first will allow Passenger to do all the work while the second, for advanced users, allows you to point Phusion to your pre-installed Nginx. We're going to make life easy on ourselves and choose option 1. I'd also recommend keeping the default path (/opt/nginx).
The Nginx configuration file (nginx.conf) file is in /opt/nginx/conf/ They've done you the favor of adding the lines you need to get going. Defining the configuration file is beyond the scope of this tutorial, but I've included a sample file which you can download. This file assumes your application is in /var/www/myapp/current.
Sample nginx.conf file for Ruby on Rails, Nginx, Phusion Passenger.
Step 10: Time to make some Nginx tweaks for Ubuntu/Debian. If you're used to running nginx as installed by Debian or Ubuntu then you might notice that you've lost the familiar way to start and stop nginx. Gone is /etc/init.d/nginx stop and /etc/init.d/nginx/start. To get it back, copy (or download) this into a file called nginx in /etc/init.d/ (as root)
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/opt/nginx/sbin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/opt/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /opt/nginx/logs/$NAME.pid \
--exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
Next, let's set the permissions and make nginx load on a reboot:
sudo chmod +x /etc/init.d/nginx
sudo /usr/sbin/update-rc.d -f nginx defaults
Now you should be able to start and stop nginx using the command you're used to:
sudo /etc/init.d/nginx start
Bonus steps In case it's not already installed, let's grab the perquisites and then install the mysql gem. This will improve performance on your webserver:
sudo apt-get install libmysqlclient-dev
sudo gem install mysql --no-rdoc --no-ri
You should also look into using a helper for deployment. I still use Capistrano but there are alternatives such as Vlad the Deployer, Puppet and others. I will also recommend that if you go with Capistrano that you check out the capistrano-ext gem which allows you to do multi-stage deployments.
Troubleshooting If things didn't go smoothly, here are some things to check:
1. There's an error log for nginx in /opt/nginx/logs/ Try looking to see if you get any hints there.
2. If you see a 403 forbidden error, make sure you have permissions set correctly. I'm running Nginx as www-data and I've set the group/user owners of my rails app to match using the chown -R www-data:www-data command. It doesn't hurt to confirm it.
3. Try running your rails app in development mode using the standard script/server. If it doesn't work there then it obviously won't work in production mode either
For help, you should check out the great railsforum or Mailing list front-end.
Click
Follow me on twitter 
Thanks. Just installed Ubuntu and found this very useful.
ReplyDeletethank you!
ReplyDeleteDon't forget to set your gem sources to gemcutter:
ReplyDeletesudo gem install gemcutter
sudo gem tumble
I really like the deployment recipe of Brightbox. It uses a combination of svn and cap, pretty oldschool but works better than any other deployement recipes around, although brightbox hosting is a bit costlier than the other ones.
ReplyDeleteIt does have one advantage over other VPS and such services though, saves you an effort to configure your prod environment, although i agree it wont take much time, but getting something out of the box is quite helpful
Thanks a million. Especially the nginx/passenger installation really helped a lot.
ReplyDelete/Erik
Hi. Great steps.
ReplyDeleteDoes anyone know how do I configure nginx so it compiles erb files when it hits them? Sorry for lame question
I tried step-by-step ad util assigning the links everything was OK. But when I tried to install rails, I got an error:
ReplyDeleteserge@ubuntu:~ /rubygems-1.3.5$ gem -v
1.3.5
serge@ubuntu:~ /rubygems-1.3.5$ sudo gem install rails
ERROR: Error installing rails:
invalid gem format for usr/lib/ruby/gems/1.8/cache/rake-0.8.7.gem
Can anybody explaine me how to resolve this problem. Thank you
try with: gem install rails
ReplyDeletewithout sudo
have an error when install nginx-module: Rake... not found
ReplyDeleteI have this installed (gem install rake)
Oh, fixed. Install rake from Synaptic
ReplyDeleteGreat Article for a newbie in ubuntu on How to install ROR
ReplyDeleteIf I try to istall a gem without sudo, it will be installed in my home directory
ReplyDeleteThanks! Worked perfectly!
ReplyDeleteExcellent Article, Thank you very much !!
ReplyDeleteI'm getting this error, any suggestions on how to solve it
ReplyDeleteThe following packages have unmet dependencies:
ri1.8: Depends: rdoc1.8 (= 1.8.7.174-1ubuntu1) but 1.8.7.174-1 is to be installed
E: Broken packages
this has to be by far the best most complete tutorial ive ever followed... direct, to the point, and doesnt miss a step. A+
ReplyDeleteExcellent tutorial!!!
ReplyDeleteI cannot get the command sudo passenger-install-nginx-module to work. Returns command not found
ReplyDeleteThank you for the detailed instructions..
ReplyDeleteThanks! Almost perfect. You may want to add the "libdbd-sqlite3-ruby" and "libsqlite3-ruby" packages as well. Otherwise you may get some funky errors from Rails.
ReplyDeletekeep up the good work!! your tutorial is a life saver!
ReplyDeleteAwesome guide. Steps 1-6 got my local dev environment working without a hitch. Thank you so much! BIG fan of this tutorial
ReplyDeleteThank you so much! This was so easy!
ReplyDeleteI am really enjoying Ubuntu at the minute.
Thanks for the tutorial, I also went up to step 6 and that worked great.
ReplyDeleteAlmost too easy, 5 minutes from start to finish...
ReplyDeleteUsing Nginx for both static files and dynamic rails generated content (with phusion Nginx module) sounds like non-sense to me http://www.b-list.org/weblog/2008/jun/23/media/
ReplyDeleteThanks. This was just what I needed.
ReplyDeleteThanks for Sharing this
ReplyDeleteCheers,
Pankaj Sisodiya
very easy setup. thank you
ReplyDeleteGreat tutorial, thanks very much.
ReplyDeleteRunning Ubuntu 9.10 32-bit under Windows 7 with VirtualBox. Fails when trying to do the 'gem install rails' and in fact gem cannot install anything at all. Just doesn't do anything.
ReplyDeleteAfter MANY hours of hair-pulling and head-scratching that it was a matter of switching the VM from NAT to Bridged networking. No clue as to why this is or why it trips up just this part of the process.
Once that was sorted out everything else went very smoothly.
Great tutorial!
excellent guide, thank you!
ReplyDeleteHi,
ReplyDeleteThanks for the tutorial but I have a problem trying to install rails I get this:
$ sudo gem install rails
sudo: gem: command not found
Any Idea of why?
Just use the following to get more actual versions of ruby, irb, ri and rdoc.
ReplyDeletesudo apt-get install ruby1.9.1 ri rdoc1.9.1 mysql-server libmysql-ruby ruby1.9.1-dev irb1.9.1 libdbd-mysql-perl libdbi-perl libmysql-ruby1.9.1 libmysqlclient15off libnet-daemon-perl libplrpc-perl libreadline-ruby1.9.1 libruby1.9.1 mysql-client-5.1 mysql-common mysql-server-5.1 rdoc1.9.1 ri1.9.1 ruby1.9.1 irb libopenssl-ruby libopenssl-ruby1.9.1 libhtml-template-perl mysql-server-core-5.1 libmysqlclient16 libreadline5 psmisc
This page has saved me soooo much time, I always just go straight here whenever I'm setting up a new dev environment (way more often than one would expect) in karmic (and for jaunty before that) and never have issues, thanks so much!!!!
ReplyDeleteThanks for the post. I just installed ubuntu 10.04 and this is useful!
ReplyDeleteOn step3, I get this error. Would really appreciate it if you can tell me how to get past it -
E: Couldn't find package libmysqlclient15off
Thank you this has helped me a lot. Just so you know saw at Step 3 I get this message:
ReplyDeleteThe following packages were automatically installed and are no longer required:
binutils-static policykit
Use 'apt-get autoremove' to remove them.
@aswath, just remove that package from the apt-get line and it should be fine. This is practically the only difference between installing on Karmic and Lucid
ReplyDeletethanx .........i was blocked by this setup issue.
ReplyDeleteThanx a lot man.
Thank you for the detailed instructions. Got up and running on Ubuntu 9.10 with an earlier version of Rails in minutes. You're making life better for lots of people.
ReplyDeleteAny chance you can do a tutorial on Ubuntu 10.10 with the latest versions of Ruby, Rails, MySQL, etc?
ReplyDeleteTHANK YOU VERY MUCH! This was great help!
ReplyDelete