カニでもわかるRails 3 (nginx + unicorn) 開発環境構築
今まで Rails 1系だけ触った事があったのですが、Rails 3系をやる機会があったので、開発環境構築手順をまとめました。
手順として、
という感じでいきます。
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
これで準備完了!