Installing RVM + Ruby + Rails + Passenger + nginx on CentOS

I recently had to install all of this ^ on a CentOS machine.  I found myself jumping all over the place trying to figure it out.  This isn’t the first time I’ve had to do this, and it probably won’t be the last time, so I decided to document my journey!

This is not a copy-and-paste script.

Go through it, read the comments, and visit ‘Sources’ links at the bottom of this post to make sure you understand what’s going on.

# Steps to install RVM + Ruby 1.9.2 + Rails + nginx + Passenger on CentOS (tested on v5.5)

# Install git and curl, if not already installed
sudo yum install git
sudo yum install curl

# Create the rvm group and add any users who will be using rvm to the group
sudo su -
groupadd rvm

# Start by adding the root user (required to install RVM)
usermod -a -G rvm root

# Then add any other users who need access to to the rvm group and logout of the superuser account

# Install RVM (system wide) 
sudo bash < <( curl -L ) 

# Logout, then log back in (I found that my user did not belong to the RVM group until I did this) 

# Now that you have RVM installed, follow post-install instructions here: 
# * but change the RVM path to /usr/local/lib/rvm 

# Add this line to the end of any user who needs access to RVM's .bash_profile 
# this will add it to the end of the current user's profile 

echo '[[ -s "/usr/local/lib/rvm" ]] && . "/usr/local/lib/rvm"  # This loads RVM into a shell session.' >> ~/.bash_profile 
source ~/.bash_profile 

type rvm | head -1 # should print 'rvm is a function'

# I ran this to install ruby dependencies, as per instructions in `rvm notes`
sudo yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel

# Install Ruby 1.9.2
sudo rvm install 1.9.2

# Set the RVM default to 1.9.2
rvm --default use 1.9.2

ruby -v # should return the version of ruby we're using

# Now, install Rails and Passenger
gem install rails passenger

# Install nginx with Passenger support. Press 1 when prompted
rvmsudo passenger-install-nginx-module

# Set up a nginx init script -- I used the one found here:
# and modified the nginx and NGINX_CONF_FILE variables to point to my nginx install (which is in /opt/nginx)
cd /etc/init.d
sudo wget -O nginx
sudo chmod +x nginx

# set nginx to start automatically when the server restarts
sudo /sbin/chkconfig nginx on

# the mysql gem requires mysql-devel
sudo yum install mysql-devel
gem install mysql

# the pg gem requires postgresql-devel
sudo yum install postgresql-devel
gem install pg

# Sources
# (also see the 'Commnunity Resources' links at the bottom of the page)


    ms-ati |

    The RVM system-wide installation at line 18 no longer works!

    See link to

    Nathan |

    just use sudo with the normal install command and it’ll install system wide. eg:

    sudo bash < <(curl -s link to

    per. link to

    Ashley Connor |

    This line:

    start-stop-daemon –start –quiet –pidfile /opt/nginx/logs/$ \

    Is going to cause problems on a CentOS distro.

    Sagish |

    Thanks so much for this guide through, I’ve been through a couple is this is the most profound I came across.

    Dazza |

    The rvmsudo line failed for me on Centos 6.4. (command not found error returned by rvmsudo).

    I had to put it into quotes to get it to work:-

    rvmsudo `which passenger-install-nginx-module`