Ruby on Rails

By Scott Brady

Introduction and Key Terms

Ruby is an interpreted, object-oriented language inspired by Ada and Perl and shares some features with Python and LISP. Rails is a web application framework written in Ruby. Rails uses the model-view-controller software design pattern and provides a framework for the fast development of maintainable web-based, database-driven applications. Rails supports: advanced views using AJAX; many different databases, including MySQL, PostgreSQL and Oracle; and many different web servers, including Apache and lighttpd.

Key Terms

Installing Ruby, Gems and Rails

Ruby

Debian Stable contains a prepackaged version of Ruby. In addition to installing Ruby, you also need to install the zlib compression libraries for Ruby, the Ruby Documentation program that generates documentation from ruby source files, and the command-line Ruby interface. Run the following command to install the needed packages:

aptitude install ruby libzlib-ruby rdoc irb

If you want to test-drive Ruby from the command line you can run the irb program and execute Ruby commands:

# irb
rb(main):001:0> 3+5
=> 8
irb(main):002:0> 4*20
=> 80
irb(main):003:0> foo="bar"
=> "bar"
irb(main):004:0> foo.reverse
=> "rab"
irb(main):005:0> bar=40
=> 40
irb(main):006:0> bar.to_s.reverse
=> "04"
irb(main):007:0> exit

Gems

Now that you have Ruby installed you need to manually download the Gems package management software for Ruby. The latest version of Gems can be downloaded from the RubyForge web site.

From the command line, cd into the directory where you downloaded the Gems tarball and run the following command to extract the contents of the archive:

tar zxvf rubygems-0.8.11.tgz

Please note that the version number may be different if you downloaded a different version. You now need to cd into the newly created Gems directory and run the setup program for Gems:

cd rubygems-0.8.11
ruby setup.rb all

Notice how even the setup program for Gems is written in Ruby. These people take their language seriously.

Rails

Now that Gems is installed, you can finally install Rails. Run the following command to tell Gems to download and install the latest version of Rails:

gem install rails --include-dependencies

Congratulations, Ruby on Rails is now installed on your system.

Apache

While you can use many different web servers with Rails, we're going to configure our installation with Apache. If you want to configure Rails with a different web server, a quick Google search will yield results on how to configure Rails with other web servers.

The following command will install Apache and the FastCGI libraries for both Apache and Ruby:

aptitude install apache libapache-mod-fastcgi libfcgi-ruby1.8

The Debian package manager will automatically update Apache's configuration file to enable FastCGI and will start the web server. That's all you need to configure in Apache for right now. We will revisit Apache later in the article when we've made more progress.

Now you need to create a place to store your Rails applications. While you can store your Rails applications anywhere you want, including your home directory if desired, I recommend storing them in /var/rails. Why /var? Because /var is where Apache on Debian stores its web site files (/var/www to be exact) and I like keeping similar files in the same directory.

The following commands will create the Rails application directory and set the proper permissions for their use by the web server:

mkdir /var/rails
chown -R www-data:www-data /var/rails
chmod -R g+w /var/rails
chmod u+s,g+s /var/rails

Database

Ruby on Rails supports multiple databases. The following is a list of some of the packages that supply database drivers for Ruby:

For example, to install the Ruby drivers for PostreSQL, you would run the following command:

aptitude install libpgsql-ruby

If you want to verify that the drivers are properly installed, you can run the following set of commands:

# irb
irb(main):001:0> require 'postgres'
=> true
irb(main):002:0> exit

You can see that the driver loaded successfully and we were able to exit out of the Ruby interface.

RadRails: A Rails IDE

If you're considering using Rails it's probably because of the promises of a faster development cycle (that's certain not a bad thing). To further speed up your development time you may consider using an IDE (integrated development environment) like RadRails. The RadRails IDE is based on the Eclipse project and has been customized specifically for Ruby on Rails development. If RadRails sounds like something you'd like to try, read on, otherwise, skip on down to the Creating a Rails Application section and fire up your favorite editor.

Java

Because RadRails is written in Java, you need to install Java on your system. The latest version of Java can be downloaded from Sun's website.

Once you've downloaded the self-extracted archive, run the following command to extract the archive's contents:

bash jdk-1_5_0_06-linux-i586.bin

You now need to move the extracted directory into the /usr/local directory.

mv jdk1.5.0_06 /usr/local

In order to make the Java executables accessible from your path, you need to create symbolic links for all the Java programs. Fortunately, you can use the wildcard and your shell will automatically expand all the programs and create the links for you.

ln -s /usr/local/jdk1.5.0_06/bin/* /usr/local/bin/

To test that Java is installed on your system and accessible from the path, run the following command.

java -version

You should see a few lines telling you about the version of Java you just installed. If you get an error, please go back and make certain you followed the steps correctly.

RadRails

You now need to download the RadRails archive from their website.

After the download is complete, change into the directory where you downloaded the archive to and execute the following command:

unzip radrails-0.5.2.1-linux.zip

If unzip isn't installed on your system you need to run aptitude to install the package:

aptitude install unzip

Once you've successfully extracted the contents of the archive, execute the following command to move RadRails into its destination directory:

mv radrails /usr/local

RadRails is now installed. You can run RadRails by executing the following command:

/usr/local/radrails/radrails

Note: Because RadRails is a Java program it doesn't like being called from a symbolic link. If you create a symbolic link to a directory in your path and then try to run the program it will spit out errors and crash. I guess that's the downside of write-once, run-anywhere.

Creating a Rails Application

Now you're ready to create your first Rails application. All the Rails files that require editing can be opened in any editor (e.g. vi, emacs, etc.) or can be edited with RadRails. Use whichever program is most comfortable for you. However, I do not recommend using RadRails to edit non-Rails files (e.g. httpd.conf). Non-rails files should be edited with a normal editor.

Before you run any commands, change into the rails directory that you created earlier.

cd /var/rails

Now you can tell Rails to create a new application. Replace yourapp with the name of your application:

rails yourapp

Rails will now create a large number of files in /var/rails/yourapp that will make up your Rails application. Let's start out by editing the .htaccess file in order to tell your application to use FastCGI instead of regular CGI.

Edit the file /var/rails/yourapp/public/.htaccess and make the following changes:

Comment out: RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
Insert: RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Notice that the different between the two lines is the extension on the dispatch file. We've changed it so your application will use the FastCGI version.

WEBrick

Ruby on Rails has a built-in web server called WEBrick that you can use to test out your Rails applications. While WEBrick is good for testing, you wouldn't want to use it in a production environment. For the real deal you will want to use a real web server like Apache or lighttpd.

To start WEBrick, run the following command:

script/server

Now you can fire up your web browser and load the following URL to access the web server:

http://localhost:3000/

Configuring Apache

You now have two different options for configuring Apache to use your Rails application. You can configure your application is a virtual host which will not effect the main web site, or you can make the rails application the main web site. If you want to test Rails on a web server that is already serving web sites then you will want to use the virtual host option. If your Rails application is the only thing being served by your web server then you can make it the main web site.

Virtual Host

Open up the /etc/apache/httpd.conf file and add the following configuration information at the end of the file:

<VirtualHost *:80>
   ServerName yourapp
   DocumentRoot /var/rails/yourapp/public/
   ErrorLog /var/rails/yourapp/log/apache.log

   <Directory /var/rails/yourapp/public>
      Options ExecCGI FollowSymLinks
      AddHandler cgi-script .cgi
      AllowOverride all
      Order allow,deny
      Allow from all
   </Directory>
</VirtualHost>

Save the file, exit from your editor and run the following command to restart Apache:

apachectl restart

You now need to edit your /etc/hosts file so the name you gave your server will resolve. Either add the following line to your hosts file or add yourapp to the end of the existing line:

127.0.0.1 yourapp

Now open up your web browser and load the following address:

http://yourapp/

You should see a page welcoming you to Ruby on Rails!

Entire Web Server

Open up the /etc/apache/httpd.conf file and make the following change:

Comment out: DocumentRoot /var/www
Insert: DocumentRoot /var/rails/yourapp/public

You will also need to add the follow configuration to the end of the file:

<Directory /var/rails/yourapp/public>
   Options ExecCGI FollowSymLinks
   AddHandler cgi-script .cgi
   AllowOverride all
   Order allow,deny
   Allow from all
</Directory>

Save the file, exit from your editor and run the following command to restart Apache:

apachectl restart

Now open up your web browser and load the following address:

http://localhost/

You should see a page welcoming you to Ruby on Rails!

Developing your Application

This article isn't going to cover how to write a Rails application. There are a million resources out there that can get you started developing with Rails. If you want some demonstrations of what can be done with Rails in less than half an hour, take a look at the ScreenCasts on the Ruby on Rails web site.

Ruby on Rails documentation, including web sites, books, and other resources, can also be found on the Ruby on Rails Documentation web page.

Further Reading

Site Contents