RubyonRailsをNginxとUnicornで動かす方法

Railsアプリケーションを動かす環境について。
今度はNginxとUnicornです。

ApacheとPassengerについては下記参照。

RubyonRailsをApacheとPassengerで動かす | Workabroad.jp

Rails & Passenger を Production(本番)モードで公開する時 | Workabroad.jp

Railsアプリが動くまで。
最低限の設定をします。

環境

  • Vagrant
  • CentOS 6.4
  • Ruby 2.0
  • Rails 4.0

Vagrant

ApacheとかWebrickとかいろいろと試してみたいので、
ポートをわけようと思います。必要なければ読み飛ばしてください。

Vagrantfile

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  config.vm.network :forwarded_port, guest: 8080, host: 8080

ひとまず、Nginxを使うときはポート8080でアクセスすることにします。
※forwarded_portの書き方はVagrantのバージョンによって少し違うようです。

$ exit
Vagrantの設定を読み込み直します。
$ vagrant reload

Nginx

インストール

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx
確認
$ nginx -v

設定
Ubuntuの場合はsite-unabledとかいうディレクトリがあるみたいですけど、
CentOSではなかった。
でも、別に必要ない。

設定ファイル1.

/etc/nginx/nginx.conf

→ 特にさわらなくても良いかと。

設定ファイル2.

/etc/nginx/conf.d/default.conf

→ 自分用にカスタマイズ

$ cd /etc/nginx/conf.d/
設定ファイルをコピー
$ sudo cp default.conf your_app.conf
編集
$ sudo vi your_app.conf

/etc/nginx/conf.d/your_app.conf

server {
    listen       8080;
    server_name  your_app.com;
    # Vagratのデフォルトはこうなってた気がするが。
    root   /var/www/html/your_app/public;
    # 404ファイルでちょっとテストしてみる。
    index  404.html;
}

起動

$ sudo service nginx srart

your_app.com:8080にブラウザからアクセスすれば
Railsの404ページが表示されるはず。
この時点で「403 forbidden」とかNginxのエラーが表示されたら
ディレクトリのパーミッションとかを疑いましょう。

なお、アパッチも起動してますと言う場合は終了させるか、
/etc/nginx/conf.d/default.confのlistenを80以外にしておくと、
Nginx起動しない!なんてことがないかと。

Unicorn

RailsのGemfile編集

/Gemfile

# Use unicorn as the app server
gem 'unicorn'

インストール

$ bundle install

設定ファイル

/config/unicorn.rbを作成

/config/unicorn.rb

working_directory "/var/www/html/your_app"
pid "/var/www/html/your_app/tmp/pids/unicorn.pid"
stderr_path "/var/www/html/your_app/log/unicorn.log"
stdout_path "/var/www/html/your_app/log/unicorn.log"

listen "/tmp/unicorn.todo.sock"
#listen 3000
worker_processes 2
timeout 30

Unicorn起動

# your_appの中
$ bundle exec unicorn -c config/unicorn.rb -D

Nginxの設定ファイルを変更

/etc/nginx/conf.d/your_app.conf

upstream unicorn {
  server unix:/tmp/unicorn.todo.sock fail_timeout=0;
}

server {
    listen       8080;
    server_name  your_app.com;

    root   /var/www/html/your_app/public;
    # indexはコメントアウト
    # index  404.html;

    try_files $uri @unicorn;

    location @unicorn {
      proxy_set_header Host $http_host;
      proxy_pass http://unicorn;
    }
    # エラーは500.htmlを表示させる
    error_page 500 502 503 504 /500.html;
}

Nginx再起動

$ sudo service nginx restart

以上です。
Vagrantローカル環境ですが、Apache+Passengerよりもだいぶ速くなりました。

プロセス終了は
$ kill -QUIT 12273
log -> [2013-10-25T13:54:03.608581 #12273]
とかでいいのかな。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた