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
ディスカッション
コメント一覧
まだ、コメントがありません