Installing nginx with passenger and RVM

In this post I am going to tell you how to install the nginx server with passenger to host rails applications

System Configurations

  • OS: Ubuntu 11.10
  • Ruby: 1.8.7

I am using RVM for ruby version management

Don’t install nginx with sudo apt-get install nginx command, I face lot of problems with it.. First install Ruby 1.8.7 with RVM Next install passenger which ever version you want, I prefer latest.

gem install passenger

The above command will install passenger for your system, now we can install either apache2 or nginx as HTTP servers. I am installing nginx here.

After installing passenger you need to run the following command

rvmsudo passenger-install-nginx-module

This is important step while installing, don’t run above command with sudo or without rvmsudo it won’t work as expected.

The script will ask you if you want a default installation or a custom/advanced on. I just did the default (option 1).

The script downloads and compiles nginx. It will ask you where you want it installed. I suggest /usr/local/nginx.

Don’t just say /usr/local as that will create conf, html and logs directory right in /usr/local. You really want these in a nginx specific directory.

All being well the compilation and installation will go smoothly and your fresh installation of nginx will be modified for use with passenger.

If I remember the installation correctly it actually fires up nginx and leaves it running. Check that with ps ax | grep nginx

Go to your browser. http://localhost should give a ‘welcome to nginx’ page. Look in /usr/local/nginx/logs/ for logging output.

ConfigurationI set up a symlink in /usr/local/sbin to the nginx binary so that it can be found in my regular PATH

sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

You start nginx with ‘sudo nginx’ and shut it down with sudo killall nginx It needs to be run via sudo.

Configuring nginx is done in /usr/local/nginx/conf/nginx.conf and if you are used to Apache config files this will be a breath of fresh air. The main changes I made from the default was to set myself as the user and set the worker_processes to 2. To set up a Rails application simply add a server block like this:

server {
listen 80;
root /Users/rvg/projects/test/public;
passenger_enabled on;
rails_env development;

Be sure to set the rails_env unless you are in production (the default) otherwise it will not work. Restart nginx and with any luck you’ll be able to access your application. I made a few missteps doing my installation - such as thinking I needed to install nginx myself - but overall this went very smoothly.

This post is licensed under CC BY 4.0 by the author.