This tutorial aims to explain how to get a Ruby on Rails site “deployed” on a local machine strictly for development purposes.
1: Install Apache
You can do this in several ways, but here is how I like to do it, because I need Apache to speak PHP too…
$ sudo apt-get update && sudo apt-get install lamp-server^ -y
(NOTE: the caret after ‘lamp-server’) is not a typo!)
If you don’t want the entire LAMP server stack, you can simply install apache:
sudo apt-get install apache2 apache2-mpm-prefork apache2-prefork-dev -y
Navigate your browser to http://localhost, and if you see something like:
…your server’s working.
2: Install Ruby and Rails
This one’s a bit more difficult; you can go the Ubuntu way and install Ruby from the Ubuntu package manager, but you’ll end up with an ancient version (by the standards of the Rails community). The best tutorial by far that I have found on this is at the link below:
After following the steps in the GoRails link, the rest of this should go smoothly.
3: Install Passenger
Phusion Passenger is an excellent package that gives Apache2 the ability to run Rails applications. It is actually super simple to install:
gem install passenger && passenger-install-apache2-module
The second command (after the ampersands) takes care of checking for dependencies. It will give you instructions to follow in order to get passenger running; these are highlighted in red in the console output. Follow those instructions exactly, with one exception: if you see an error complaining about Apache2 not being compiled with a usable “MPM”, don’t worry; just hit “Enter” again to continue with the installation anyway.
Once the installation of Passenger is complete, you will see two important chunks of output in the console: the first is a few lines of code that you need to put into the Apache2 config, and the other is an example virtualhost setup.
Copy the lines that are meant to go into the Apache2 config using
ctrl-shift-c. Then run:
sudo gedit /etc/apache2/apache2.conf
You can replace “gedit” with your editor of choice. Scroll to the bottom of the file and paste in the lines you copied. Also, you may consider putting
ServerName localhost into this file as well if you are getting server name errors when you start Apache2.
You may also wish to copy the example virtualhost setup to a temporary file for use in a moment.
4: Virtualhost Setup
By default, Apache2 only has permissions to operate inside of “/var/www/”. This can be annoying, because we don’t want to have to use “sudo” every time we want to edit something in our projects. I tackle this problem in two ways:
$ sudo usermod -a -G www-data $USER
sudo ln -sT /home/$USER/path/to/my_project /var/www/my_project
The first command adds your user to the www-data group, meaning that group permissions applying to www-data will also apply to you. The second creates a symlink in /var/www called “my_project”. This symlink allows Apache2 to “see” what is in your project, which is the last thing we needed to do before adding in the virtualhost file for your project.
Create your new virtualhost file:
sudo gedit /etc/apache2/sites-available/my_project.conf
As always, replace “gedit” with your editor of choice.
Copy the following virtualhost configuration into your editor and change the document paths to lead to your project’s public directory through the symlink you just made:
<VirtualHost *:80> ServerName local.trackerx.com RailsEnv development DocumentRoot /var/www/my_project/public <Directory /var/www/my_project/public> AllowOverride all # MultiViews must be turned off. Options -MultiViews </Directory> </VirtualHost>
You may also choose to change the environment variable to “production” or whatever else you have set up in your project.
Wrap It Up
This setup should allow you to view your projects without having to run the development server every time you want to get to work, and it allows you to put your projects in your home directory or wherever else you want to put them.
Note: you will probably have to restart Apache2 on a regular basis. When you install a new gem in your project, run:
sudo service apache2 restart
to get the server running again.