#Ruby on Rails installation on Ubuntu 12.04 LTS + Nginx + Puma# ##Adding new user## Create new user:
sudo useradd -G sudo -m -s /bin/bash luna
Change password:
sudo passwd luna
Login:
su - luna
##Installing Ruby, Ruby on Rails and Puma## Install cURL:
sudo apt-get install curl
curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles
Logs. Latest stable Ruby will be automaticly installed. To start using RVM you need to run:
source /home/luna/.rvm/scripts/rvm
Check:
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
gem install rails -V
Most of the time will take:
Installing ri documentation for rails-4.0.1
Check:
$ rails -v
Rails 4.0.1
Create folders for all projects:
mkdir /home/luna/www
For "example project":
mkdir /home/luna/www/myapp
Browse to myapp:
cd /home/luna/www/myapp
rails new .
Edit Gemfile
:
nano Gemfile
Add to the bottom:
gem 'puma'
And run:
bundle install
to install missing packages (gems).
Rails required JavaScript runtime:
sudo apt-get install nodejs
source
##Installing and configuring Nginx##
All commands from this
link.
The NGINX version in the Ubuntu repo is quite old (ie. 1.2.6), you could install newer version by adding the official nginx.org repo:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
Edit /etc/apt/sources.list
:
sudo nano /etc/apt/sources.list
Add to the bottom:
deb http://nginx.org/packages/ubuntu/ precise nginx
Make sure Nginx uninstalled:
sudo apt-get purge nginx*
Then install:
sudo apt-get update
sudo apt-get install nginx
Check:
$ sudo nginx -V
nginx version: nginx/1.4.3
TLS SNI support enabled
configure arguments:
--prefix=/etc/nginx
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
--user=nginx
--group=nginx
--with-http_ssl_module
--with-http_realip_module
--with-http_addition_module
--with-http_sub_module
--with-http_dav_module
--with-http_flv_module
--with-http_mp4_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_stub_status_module
--with-mail
--with-mail_ssl_module
--with-file-aio
--with-http_spdy_module
--with-cc-opt='-g -O2 -fstack-protector
--param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2'
--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed' --with-ipv6
Open Nginx global config:
sudo nano /etc/nginx/nginx.conf
Uncomment line (for gzip compression):
gzip on;
Then start service:
sudo service nginx start
Open in browser http://192.168.1.43/
(change to your server IP) there should be Nginx congrats page.
Open new config file:
sudo nano /etc/nginx/conf.d/myapp.conf
And paste this:
upstream myapp {
server unix:///tmp/myapp.sock;
}
server {
listen *:80;
server_name site.com;
access_log /var/log/nginx/my_app-access.log;
location /favicon.ico {
root /home/luna/www/public/favicon.ico;
gzip_static on;
expires max;
add_header Cache-Control public;
}
location / {
root /home/luna/www/myapp/public;
try_files $uri @app;
gzip_static on;
expires max;
add_header Cache-Control public;
}
location @app {
proxy_pass http://myapp;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_502;
}
}
Save and exit.
Restart Nginx:
sudo service nginx restart
Make sure you are still in /home/luna/www/myapp/
folder and run:
bundle exec puma -e development -b unix:///tmp/myapp.sock
Output should be:
Puma starting in single mode...
* Version 2.6.0, codename: Pantsuit Party
* Min threads: 0, max threads: 16
* Environment: development
* Listening on unix:///tmp/myapp.sock
Use Ctrl-C to stop
Add to your desktop's hosts
file line:
192.168.1.43 site.com
Open in browser http://site.com/
there should be Rails congrats page, and in console should be new line:
* Listening on unix:///tmp/myapp.sock
Use Ctrl-C to stop
192.168.1.36 - - [10/Nov/2013 15:18:30] "GET / HTTP/1.0" 200 - 0.2573
If you see 403 error page, then something wronge with Nginx config file, if you see 502 error then something wronge with Rails or Ruby.
In the end, if all working, run app as daemon:
bundle exec puma -e development -d -b unix:///tmp/myapp.sock
Show all daemons:
ps aux | grep puma
Output:
luna 2729 0.8 5.2 406332 53036 ? Sl 15:36 0:00 /home/luna/.rvm/gems/ruby-2.0.0-p247/bin/puma
luna 2737 0.0 0.0 10636 916 pts/0 S+ 15:37 0:00 grep puma
Kill process:
sudo kill -s SIGTERM 2729
If not working:
sudo kill -s SIGKILL 2729
Restart process:
sudo kill -s SIGUSR2 2729
To generate assets for production:
rake assets:precompile --trace RAILS_ENV=production
Then run production:
bundle exec puma -e production -b unix:///tmp/myapp.sock
In page source code you will see:
<link data-turbolinks-track="true" href="/assets/application-58c7c0e35a67f189e19b8c485930e614.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-67fb624685eb5c3c2d8351122ac368a1.js"></script>
Check if gzipped files are requested https://gist.github.com/ancap/7412407.