Rails3のアプリケーションをnginx+unicorn上で動かすメモ
Railsをnginxとunicornで動かすと速いというウワサを耳にしたので,さっそくやってみることに.
unicornはgemで配布されてるのでインストールは簡単.
$ gem install unicorn
unicornの設定ファイルを,config/unicorn.rbとして新しく作成する.
# -*- coding: utf-8 -*-
# ワーカーの数
worker_processes 2
# ソケット
listen '/tmp/unicorn.sock'
pid '/tmp/unicorn.pid'
# ログ
log = '/var/log/rails/unicorn.log'
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
preload_app true
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の起動は,bundle exec unicornまたはunicorn_railsというコマンドを用いる.ポート番号はnginxとかapacheですでに使ってしまっている80などを回避して,WEBrickのデフォルトで使ってた3000あたりを適当に利用する.
$ bundle exec unicorn --config-file config/unicorn.rb --listen 127.0.0.1:3000 --env development
これでunicorn側は大丈夫だが,毎度起動するためにこれを打つのは怠いので,ここ(Nginx+Unicorn)のように起動スクリプトを作っておくと便利そう.
nginxの設定はApacheと共存させるためにやったリバースプロキシの設定とほぼ同じようにすればよい.
upstream rails-unicorn {
server unix:/tmp/unicorn.sock;
}
server {
listen 80;
server_name localhost;
client_max_body_size 4G;
root /path_to_app/public;
# Reverse proxy setting for Ruby on Rails 3.2
location / {
proxy_pass http://rails-unicorn;
proxy_redirect off;
proxy_cache cache1;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 1d;
}
location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ {
#gzip_static on;
expires max;
add_header Cache-Control public;
}
error_page 500 502 503 504 /500.xml;
location = /500.xml {
root /path_to_app/public;
}
}
あとはlocalhost:3000にアクセスして動作するか確認.
参考:
ubuntuでnginx + unicorn – 設定編
Rails3アプリをnginx+unicornで動かしたら速すぎた
Rails3.2.8環境構築(Nginx+Unicorn)
花見の季節にさくらVPS: Nginx+Unicorn+Rails+Capistrano
ディスカッション
コメント一覧
まだ、コメントがありません