RVM with Ruby2.0.0-p353 + Rails4.0.2 + Ubuntu12.04(precise64) + php-fpm by Vagrant(clean install)

p.s. If you don’t use RVM, you can just follow the instruction from Passenger offcial website. It will be easier. Plus, I installed all these things by Vagrant.

First thing to do

$ sudo apt-get update
$ sudo apt-get upgrade

Pre-setup: install necessary packages

$ sudo apt-get update
$ sudo apt-get install build-essential libssl-dev libpcre3-dev libncurses5-dev libreadline6-dev git vim curl libcurl4-openssl-dev libreadline6 autoconf openssl git-core zlib1g zlib1g-dev  libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libgdbm-dev libncurses5-dev automake libtool bison subversion pkg-config libffi-dev

Get .bashrc from my repo (Optional)

$ cd
$ git clone https://github.com/jerry54010/bash-it.git
$ mv bash-it .bash_it
$ cd .bash_it
$ git checkout ubuntu
$ ln -s ~/.bash_it/.bash_profile ~/.bash_profile
$ cd
$ source ~/.bash_profile

Get .vimrc from my repo (Optional)

$ wget https://gist.github.com/jerry54010/8049575/raw/42ced22651fedf06174457e311d22d17f6591b65/.vimrc

RVM and Ruby 2.0 (RVM: Ruby version management)

$ \curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.bash_profile //if you installed my bash_profile. 
//If not, source ~/.profile
$ rvm requirements
$ echo 'gem: --no-ri --no-rdoc'  >> ~/.gemrc
$ rvm install 2.0.0
$ source ~/.bash_profile //if you installed my bash_profile. 
//If not, source ~/.profile

add this line to .bash_rc or .bash_profile (if you don't use my .bash_profile)
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

$ rvm use 2.0.0 --default

Now we should be using ruby2.0.0 by RVM, let’s check:

$ rvm list
=* ruby-2.0.0-p353 [ x86_64 ] 
// => - current
// =* - current && default
//  * - default

Nodejs, libv8-dev(for javascript) and SQLite3 (sqlite3 libsqlite3-dev)

$ sudo apt-get -y install nodejs libv8-dev sqlite3 libsqlite3-dev 

Passenger with NGINX

$ gem install passenger 
$ rvmsudo passenger-install-nginx-module
choose 2: customize
    a. src dir: /home/vagrant/nginx-1.4.4/ (where the nginx you download)
    b. I installed nginx with passenger in `/etc/nginx` (default is /opt/nginx)
    c. default

Get nginx script

If you use /opt/nginx as root dir, you don’t need to modify this script. If you use /etc/nginx or else dir as root dir like me, you should modify the script. (from linode)

$ wget -O init-deb.sh http://library.linode.com/assets/1139-init-deb.sh
$ sudo mv init-deb.sh /etc/init.d/nginx
$ chmod +x /etc/init.d/nginx
$ sudo /usr/sbin/update-rc.d -f nginx defaults

The nginx default public folder will be in /etc/nginx/html check nginx version:

$ /etc/nginx/sbin/nginx -v
nginx version: nginx/1.4.4

Install php5-fpm

$ sudo apt-get -y install php5-cli php5-common php5-fpm
$ sudo vim /etc/php5/fpm/php.ini 
//(find and change to `cgi.fix_pathinfo = 0` )
$ sudo vim /etc/php5/fpm/pool.d/www.conf 
//change: listen = 127.0.0.1:9000 to listen = /var/run/php5-fpm.sock
$ sudo vim /etc/nginx/conf/nginx.conf or /opt/nginx/conf/nginx.conf //find and modify 
location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    # With php5-cgi alone:
    #fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include fastcgi_params;
}
$ echo "<?php phpinfo(); ?>" | sudo tee -a /etc/nginx/html/phpinfo.php

Restart all:

$ sudo service php5-fpm restart
$ sudo service nginx restart

Install rails

$ gem install rails

RoR environment check

$ ruby -v 
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]
$ rails -v
Rails 4.0.2
$ rake -V
rake, version 10.1.0

If you passed, you are good to go!

Deploy Rails application by nginx:

Assume your rails application path is: /home/vagrant/projects/subapp/ (by rails new subapp) then, the /etc/nginx/conf/nginx.conf will be:

http {
    ...
    server {
        listen 80;
        server_name localhost;
        root /etc/nginx/html;

        # This block has been added.
        location ~ ^/subapp(/.*|$) {
            passenger_base_uri /subapp;
            alias /home/vagrant/projects/subapp/public$1;  # <-- be sure to point to 'public'!
            passenger_app_root /home/vagrant/projects/subapp;
            passenger_enabled on;
            rails_env development; # or production
        }
    }
    ...
}

restart nginx, you can access the url: http://localhost/subapp/

Install MySQL and Mysql adapter

$ sudo apt-get -y install mysql-server mysql-common mysql-client libmysqlclient-dev  
$ gem install mysql2 //gem mysql2 is faster than gem mysql  

The gem you installed is placed in RVM’s ruby, if you are using RVM’s ruby.

If you use MySQL in your rails application, remember to change the database.yml.

p.s. If you want to use phpmyadmin, you can do:

$ sudo apt-get install php5-mysql

download phpmyadmin, then extract to /etc/nginx/html/phpmyadmin
then start the server, access: http://localhost/phpmyadmin/