ruby:unicorn
Unicorn
Rack対応のWebアプリケーションを実行するサーバ。
File: README Unicorn: Rack HTTP server for fast clients and Unix
インストール
gemでインストールできる
$ gem install unicorn
起動
railsのrootディレクトリに移動して以下のコマンドで起動
$ unicorn -l 3000
rails 2系の場合は
$ unicorn_rails -l 3000
nginxをリバースプロキシにする
unicorn本番用のコンフィグ(${RAILS_ROOT}/config/unicorn.rb)を作成。
# folkする子プロセスの数、nginxのワーカーとだいたい同じ程度に worker_processes 8 # railsのルートを指定 working_directory '/var/lib/some_rails_app' # nginxとドメインソケットで通信する合はパスを、TCP通信する場合はポート番号を指定 listen '/var/lib/some_rails_app/tmp/sockets/unicorn.sock' stderr_path '/var/log/unicorn.err.log' stdout_path '/var/log/unicorn.out.log' preload_app true before_fork do |server, worker| ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| ActiveRecord::Base.establish_connection end
nginx.confを修正
{code}
http {
server {
listen 80;
server_name localhost;
...
}
...
upstream backend {
# unicorn.confで指定したドメインソケットのパスを指定
server unix:/var/lib/some_rails_app/tmp/sockets/unicorn.sock;
}
server {
listen 80;
server_name rails.example.com;
# rootには $RAILS_ROOT/public を指定
root /usr/local/redmine/current/public;
# public以下の静的ファイルはそのままnginxが返す
# 静的ファイルが無ければunicornに投げる
try_files $uri @unicorn;
location @unicorn {
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
# リクエストを upstream backend に投げる
proxy_pass http://backend;
}
}
# ここまで追加
...
}
nginxを起動
$ sudo service nginx start
unicornをデーモンモードで起動
$ unicorn -E production -c config/unicorn.rb -D
デーモン起動したunicornを停止
$ kill -QUIT pid
デーモン起動したunicornを強制終了
$ kill -TERM pid
起動スクリプト
適当に作成、以下はunicorn + redmineの例
#!/bin/bash
UNICORN_BIN=/usr/bin/unicorn_rails
RAILS_ROOT=/usr/local/redmine/current
PID_FILE=$RAILS_ROOT/tmp/pid/unicorn.pid
THIS_FILE=/etc/init.d/redmine
cd $RAILS_ROOT || echo >&2 "could not move redmine directory."; exit 1
check_pid() {
test -s $PID || echo >&2 "NOT FOUND PID FILE"; exit 1
}
case "$1" in
start)
$UNICORN_BIN -c config/unicorn.rb -D
;;
stop)
check_pid && kill -QUIT `cat $PID_FILE`
;;
force-stop)
check_pid && kill -TERM `cat $PID_FILE`
;;
restart)
$UNICORN_BIN -c config/unicorn.rb -D
check_pid && kill -QUIT `cat $PID_FILE`
;;
*)
echo "Usage: $THIS_FILE {start|stop|restart|force-stop} "
exit 1
;;
esac
ruby/unicorn.txt · 最終更新: by nullpon