Nginx+UnicornでRailsを動かすon Mac

  • 88
    いいね
  • 1
    コメント

Nginx+UnicornでRailsを動かすon Mac

RailsというよりRubyビギナーです。

ローカル環境ではWEBrickでもいいかなと思ったのですが、最終的にはそうもいかなくなると思うので、商用でもイケるWebサーバーを使ってみることにしました。

最初はとっつきやすそうなApache+Passengerな環境をつくろうと思ったのですが、全然上手く動かず挫折した(未だに困ってるので助けてください←)ので、勉強がてらGithubでも採用しているらしいNginx+Unicornな環境をMac(Mavericks)につくってみました。いまっぽい。

ですが、こちらもなかなか手こずったので手順をまとめておきます。

unicorn編

まずはgemでインストール。
(本当はbundleでインストールしたほうがいいのかな?)

$ gem install unicorn

次にunicornの設定ファイルを作成。

$ cd {RAILS_PROJECT_ROOT}
$ vi config/unicorn.rb

unicorn.rbの中身はこんな感じ。

unicorn.rb
rails_root = File.expand_path('../../', __FILE__)

worker_processes 2
working_directory rails_root

listen "#{rails_root}/tmp/unicorn.sock"
pid "#{rails_root}/tmp/unicorn.pid"

stderr_path "#{rails_root}/log/unicorn_error.log"
stdout_path "#{rails_root}/log/unicorn.log"

そして、デーモンとして起動。

$ unicorn_rails -c config/unicorn.rb -E development -D

特にエラーが出なければOK。

ちなみに停止したい時は以下で。

$ kill -QUIT `cat tmp/unicorn.pid`

unicornの設定は以上。

nginx編

まずは、インストール。

$ brew install nginx

そして、起動。

$ sudo nginx

http://localhost:8080
でアクセス出来ればOK。

次に設定ファイルを編集。(本当はApacheのバーチャルホスト設定ファイルとかと同じように別ファイルで管理したほうがよい)

$ cd /usr/local/etc/nginx
$ cp nginx.conf.default nginx.conf
$ cp nginx.conf nginx.conf.YYYYMMDD
$ vi nginx.conf

confファイルに以下を追記する。
パス等は適宜変更してください。

upstream unicorn {
        # nginxとunicornの連携
        # unicorn.rbで設定したunicorn.sockを指定
        server unix:{RAILS_PROJECT_ROOT}/tmp/unicorn.sock;
    }

server {
        listen 8081;
        server_name {PROJECTDOMAIN_FOR_LOCAL};

        root {RAILS_PROJECT_ROOT}/public;

        access_log /usr/local/var/log/nginx/{PROJECT_NAME}_access.log;
        error_log /usr/local/var/log/nginx/{PROJECT_NAME}_error.log;

        client_max_body_size 100m;
        error_page 500 502 503 504 /500.html;

        try_files $uri/index.html $uri @unicorn;

        location @unicorn {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_pass http://unicorn;
        }
    }    

nginx再起動。

$ sudo nginx -s reload

nginxの設定は以上。

最終確認

http://{PROJECTDOMAIN_FOR_LOCAL}:8081
にアクセスしてRailsの初期画面が表示されていればOK!

というわけで、これからRails頑張ります。

参考サイト

rails + nginx + unicorn連携:
http://qiita.com/shinyashikis@github/items/ace49154f0c71c65b2c9
nginx + unicorn + Rails on Mac
http://archive.aerial.st/archive/2011/06/16/nginx-unicorn-rails-on-mac