一、nginx 配置文件
1.一、項目目錄放在系統/var/www/
upstream app {
# Path to Unicorn SOCK file, as defined previously
server unix:/var/www/app/shared/sockets/unicorn.sock fail_timeout=0;
#server 127.0.0.1:4000 fail_timeout=0;
}
server {
listen 80;
server_name app.example.cn;
access_log /var/log/nginx/app_access.log;
error_log /var/log/nginx/app_error.log;
proxy_redirect off;
root /var/www/app/public;
location / {
try_files $uri/index.html $uri @app;
}
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
二、unicorn配置文件,touch config/unicorn.rb
2.1建立文件 mkdir -p shared/pids shared/sockets shared/log
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
working_directory app_dir
worker_processes 2
preload_app true
timeout 30
listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64
# Logging
stderr_path "#{shared_dir}/log/unicorn.stderr.log"
stdout_path "#{shared_dir}/log/unicorn.stdout.log"
pid "#{shared_dir}/pids/unicorn.pid"
#before_fork do |server, worker|
# defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
#
# old_pid = "#{ server.config[:pid] }.oldbin"
# unless old_pid == server.pid
# begin
# Process.kill :QUIT, File.read(old_pid).to_i
# rescue Errno::ENOENT, Errno::ESRCH
# end
# end
#end
#
#after_fork do |server, worker|
# defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
#end
三、建立unicorn啓動腳本
3.1 在項目目錄下面建立sh mkdir ./sh touch server_crl.sh&& vi server_crl.sh
3.二、chomd +x ./server_crl.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides: unicorn
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the unicorn app server
# Description: starts unicorn using start-stop-daemon
### END INIT INFO
set -e
USAGE="Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>"
# app settings
AS_USER="ubuntu"
APP_NAME="app"
APP_ROOT="/var/www/$APP_NAME"
ENV="production"
# environment settings
PATH="$PATH"
CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D"
PID="$APP_ROOT/shared/pids/unicorn.pid"
OLD_PID="$PID.oldbin"
# make sure the app exists
cd $APP_ROOT || exit 1
sig () {
test -s "$PID" && kill -$1 `cat $PID`
}
oldsig () {
test -s $OLD_PID && kill -$1 `cat $OLD_PID`
}
run () {
if [ "$(id -un)" = "$AS_USER" ]; then
eval $1
else
su -c "$1" - $AS_USER
fi
}
case $1 in
start)
sig 0 && echo >&2 "Already running" && exit 0
echo "Starting $APP_NAME"
run "$CMD"
;;
stop)
echo "Stopping $APP_NAME"
sig QUIT && exit 0
echo >&2 "Not running"
;;
force-stop)
echo "Force stopping $APP_NAME"
sig TERM && exit 0
echo >&2 "Not running"
;;
restart|reload|upgrade)
sig USR2 && echo "reloaded $APP_NAME" && exit 0
echo >&2 "Couldn't reload, starting '$CMD' instead"
run "$CMD"
;;
rotate)
sig USR1 && echo rotated logs OK && exit 0
echo >&2 "Couldn't rotate logs" && exit 1
;;
*)
echo >&2 $USAGE
exit 1
;;
esac