ローカル開発環境のweb serverをthinからnginx + passengerにしてみた

Railsの重いアプリを動かしている際に、開発環境が遅かったので、使っていたthinからnginx + passengerに変えてみました。 rack-mini-profilerで測った結果、2倍位速くなった感じ。

時々nginx + passenger の組み合わせはやるんだけど手順を忘れがちなので、今回はメモしておくことにします。

参考にしたのは Local Rails Development with Nginx, Passenger 4, and Ruby 2 on Mac OS X | The Wayward Traveller だった気がするんだけど、色々つまみ食い的に読みながらやったので他にもあったはず...

前提

  • Mac OS Yosemite 10.10.4を使っています
  • rbenv、homebrewを使っています
  • すでに手元に開発中のRailsのプロジェクトがあります
    • 今回はVersion 3系でした

1. passengerを入れる

% brew install passenger

2. nginxを入れる

% brew install nginx --with-passenger

3. /usr/local/etc/nginx/nginx.confを編集する

http{ 内にpassenger_rootとpassenger_rubyを追加

http {
    include       mime.types;
    default_type  application/octet-stream;
    passenger_root /usr/local/opt/passenger/libexec;
    passenger_ruby /Users/{username}/.rbenv/versions/{your ruby version}/bin/ruby;

http{ 内にserver{} を追加、root 〜 access_logには自分が開発しているrails appの各ディレクトリを指定する

   server {
      rack_env development;
      listen 8080;
      server_name {yourapp.local.com};
      root /Users/{username}/project/{yourrailsapp}/public;
      access_log /Users/{username}/project/{yourrailsapp}/log/nginx_access.log;
      error_log  /Users/{username}/project/{yourrailsapp}/log/nginx_error.log;
      passenger_enabled on;
    }

4. /etc/hostsを編集する

  1. server{}内に追加したserver_nameを指定する
127.0.0.1 {yourapp.local.com}

5. nginxを起動し、動作確認

nginxを起動

% nginx

ブラウザでhttp://yourapp.local.com:8080にアクセス => 自分のRailsアプリが起動していることを確認する