カニでもわかるRails 3 (nginx + unicorn) 開発環境構築

今まで Rails 1系だけ触った事があったのですが、Rails 3系をやる機会があったので、開発環境構築手順をまとめました。

手順として、

  • rvm インストール
  • Rails インストール
  • unironのインストールと設定 (nginxとの連携)
  • nginx インストールと設定 (unicornとの連携)

という感じでいきます。

rvm インストール

ちなみにサーバーは Debian (squeeze) です。
今回は開発環境なので、自分だけ使う前提で自分のアカウントでrvmをインストールします。

curl -L get.rvm.io | bash -s stable
# パスを通す
source ~/.rvm/scripts/rvm
# ruby インストール
rvm install 1.9.3
# gemset 作成 
rvm gemset create kanipan_rails
# kanipan_rails gemset を使う
rvm gemset use kanipan_rails

gemset use してgem installすると、

/home/kanipan/.rvm/gems/ruby-(version)@(gemset名)/gems/

以下にgemが入ります。

Rails インストール

今回は最新版 (3.2) をインストールします。

gem install rails
#バージョン確認
rails -v
Rails 3.2.11
# rails プロジェクト作成 databaseをmysqlに指定
rails new kanipan_project --database=mysql

unicornのインストールと設定

vim Gemfile

Gemfileに以下を追加

gem 'unicorn'

Gemfile保存後、

bundle install

# unicornの設定ファイル作成
vim config/unicorn.rb

サンプルとして

listen "/tmp/unicorn.sock"
pid "/tmp/unicorn.pid"

worker_processes 1
preload_app true

if ENV['RAILS_ENV'] == 'production'
  shared_path = "/var/www/shared"
  stderr_path = "#{shared_path}/log/unicorn.stderr.log"
  stdout_path = "#{shared_path}/log/unicorn.stdout.log"
end

# ログ
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を起動します。

# -D : デーモンとして動かす, -E : Railsの環境, -c : unicorn設定ファイルのパス
unicorn_rails -D -E development -c config/unicorn.rb

unicornはmasterプロセスと複数のwokerプロセスから成り立っています。 unicornを停止するにはmasterのプロセスを止めます。

pidはunicorn.rbにパスを指定しているので、

kill -9 `cat /tmp/unicorn.pid`

nginx インストールと設定

sudo apt-get install nginx
sudo vim /etc/nginx/ngin
# kanipan_project用の設定ファイル
sudo vim /etc/nginx/sites-available/kanipan_project

以下サンプル

# statements for each of your virtual hosts
upstream kanipan_project{
  server unix:/tmp/unicorn.sock;
}

server {
  listen 80;
  server_name localhost;

  access_log /var/log/nginx/kanipan_project/access.log combined2;
  error_log /var/log/nginx/kanipan_project/error.log warn;

  root /var/www/kanipan_project/current/public;

  #rails params用
  proxy_buffer_size          128k;
  proxy_buffers            4 256k;
  proxy_busy_buffers_size    256k;
  proxy_temp_file_write_size 256k;

  location / {

     proxy_pass http://kanipan_project;

}

kanipan_project用設定へのシンボリックリンクを sites-enabled以下に置きます。

sudo ln -s /etc/nginx/sites-available/kanipan_project /etc/nginx/sites-enabled/kanipan_project

ドキュメントルートにkanipan_projectのpublicフォルダへのシンボリックリンクを置きます。

# /var/wwwにシンボリックリンクをはる
sudo ln -s kanipan_project/public /var/www/current/kanipan_project

これで準備完了!