Skip to content

Instantly share code, notes, and snippets.

@wwwbruno
Created July 24, 2014 15:03
Show Gist options
  • Save wwwbruno/6ecda6bfd95120bc4f64 to your computer and use it in GitHub Desktop.
Save wwwbruno/6ecda6bfd95120bc4f64 to your computer and use it in GitHub Desktop.
Rails server config for ngnix server
# Use this gem in your Gemfile
gem 'unicorn'
#####################################
# /etc/nginx/sites-enabled/app_name #
#####################################
upstream app_name {
server unix:/home/developer/apps/app_name/tmp/app_name.sock fail_timeout=0;
}
server {
listen 80;
server_name app-name.com.br;
root /home/developer/apps/app_name/public;
try_files $uri @unicorn;
client_max_body_size 1G;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_name;
access_log /dev/null;
error_log /home/developer/apps/app_name/log/unicorn.error.log;
}
location ~ ^/(assets|javascripts|stylesheets|swfs|system)/ {
gzip_static on;
expires max;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
open_file_cache max=1000 inactive=500s;
open_file_cache_valid 600s;
open_file_cache_errors on;
break;
}
# include /home/developer/apps/app_name/config/server/nginx_errors.conf;
access_log /dev/null;
error_log /dev/null;
}
server {
listen 80;
server_name www.app-name.com.br;
return 301 http://app-name.com.br$request_uri;
}
############################
# config/server/unicorn.rb #
############################
app_path = "/home/developer/apps/app_name"
working_directory "#{app_path}"
pid "#{app_path}/tmp/pids/unicorn.pid"
stderr_path "#{app_path}/log/unicorn.log"
stdout_path "#{app_path}/log/unicorn.log"
listen "#{app_path }/tmp/app_name.sock", :backlog => 64
worker_processes 3
timeout 60
preload_app false
before_exec do |server|
ENV["BUNDLE_GEMFILE"] = "#{app_path}/Gemfile"
end
##########################
# config/unicorn_init.sh #
##########################
# Unicorn handle shell script
#
# APP_ROOT, PID - are the same as you setup above
# CMD - use bundle binstubs (bundle install --binstubs) to
# forget about "bundle exec" stuff, run in demonize mode
# bin/unicorn is for Rack application (config.ru in root dir), but
# bin/unicorn_rails is to use with Rails 2.3
#
# To handle "app_preload true" configuration we should use USR2+QUIT signals, not HUP!
# So we rewrite capistrano deployment scripts to manage it.
#
# config/server/production/unicorn_init.sh
#!/bin/sh
set -e
# Example init script, this can be used with nginx, too,
# since nginx and unicorn accept the same signals
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/home/developer/apps/app_name
PID=$APP_ROOT/tmp/pids/unicorn.pid
ENV=production
CMD="bundle exec unicorn_rails -D -E $ENV -c config/server/unicorn.rb"
action="$1"
set -u
old_pid="$PID.oldbin"
cd $APP_ROOT || exit 1
sig () {
test -s "$PID" && kill -$1 `cat $PID`
}
oldsig () {
test -s $old_pid && kill -$1 `cat $old_pid`
}
case $action in
start)
sig 0 && echo >&2 "Already running" && exit 0
$CMD
;;
stop)
sig QUIT && exit 0
echo >&2 "Not running"
;;
force-stop)
sig TERM && exit 0
echo >&2 "Not running"
;;
restart|reload)
sig HUP && echo reloaded OK && exit 0
echo >&2 "Couldn't reload, starting '$CMD' instead"
$CMD
;;
upgrade)
if sig USR2 && sleep 15 && sig 0 && oldsig QUIT
then
n=$TIMEOUT
while test -s $old_pid && test $n -ge 0
do
printf '.' && sleep 1 && n=$(( $n - 1 ))
done
echo
if test $n -lt 0 && test -s $old_pid
then
echo >&2 "$old_pid still exists after $TIMEOUT seconds"
exit 1
fi
exit 0
fi
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
$CMD
;;
reopen-logs)
sig USR1
;;
*)
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment