Railsデプロイ
Upcoming SlideShare
Loading in...5
×
 

Railsデプロイ

on

  • 3,357 views

NSEG #31での発表スライド

NSEG #31での発表スライド
思いつきでエクストリームスライド作成して発表.

Statistics

Views

Total Views
3,357
Views on SlideShare
2,827
Embed Views
530

Actions

Likes
5
Downloads
6
Comments
2

5 Embeds 530

http://blog.falconsrv.net 522
https://twitter.com 5
http://s.deeeki.com 1
http://www.hanrss.com 1
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Railsデプロイ Railsデプロイ Presentation Transcript

  • NSEG #31 Railsデプロイ 長野高専 電子情報工学科 3年 奥本 隼12年9月29日土曜日
  • 11時に起きました12年9月29日土曜日
  • 今日 NSEGがあることを 知りました12年9月29日土曜日
  • 枠が空いてる? Railsの発表しよう かな?12年9月29日土曜日
  • 現在に至る12年9月29日土曜日
  • 自己紹介 • 奥本 隼(おくもと はやと) • 長野高専 電子情報工学科 3年 • NSEGでの発表は2回目 • Ruby / Rails / Vim / Linux etc... • Twitter: falcon_8823, Facebook: falcon.882312年9月29日土曜日
  • こんなものを 作っています12年9月29日土曜日
  • イベント開催システム 「カンファイン」 http://conf-in.com12年9月29日土曜日
  • 寮食堂の献立配信システム 「Ryo-Lunch」 http://ryo-lunch.jo-ken.info12年9月29日土曜日
  • 夏休みカウントダウン 「夏休みはあとn日しかない」 http://ndays.falconsrv.net12年9月29日土曜日
  • Railsデプロイ12年9月29日土曜日
  • 内容 • Rackについて • Unicorn & Nginxを使った構成 • 手動でデプロイ • Capistranoを使った自動デプロイ(次回)12年9月29日土曜日
  • Railsのデプロイは面倒? • 設置してパーミッションを設定する • だけではない... • Webサーバとアプリケーションサーバ (Rackサーバ)が必要 • トータルすると設定量が多いかも…?12年9月29日土曜日
  • Rails本番環境の構成 Webサーバ (Apache, Nginx) Rackサーバ Rails アプリケーション12年9月29日土曜日
  • Rackとは?12年9月29日土曜日
  • Rackとは? • サーバとフレームワークをつなぐ    インターフェース • サーバ,フレームワーク共にRackに対応 していれば,組み合わせは自由 • フレームワーク:Rails, Sinatra, etc...12年9月29日土曜日
  • Rack対応サーバ • WEBRick • Passenger • Mongrel • Thin • Unicorn12年9月29日土曜日
  • Unicorn • クックパッドやGithubでも採用 • 軽い(メモリをあまり食わない) • デプロイ時のダウンタイムゼロ • Passengerとかだと10秒ぐらいダウン タイムが生じる12年9月29日土曜日
  • 構成例12年9月29日土曜日
  • できるだけ軽い構成で •Webサーバ:Nginx • Rackサーバ:Unicorn12年9月29日土曜日
  • 構成図 Nginx Unicon Rails アプリケーション12年9月29日土曜日
  • 手動でデプロイ12年9月29日土曜日
  • 大まかな手順 1. アプリケーションを設置(nginxがアク セスできるパーミッションで) 2. gem install unicorn 3. DBの作成,nginxの設定など 4. Unicornの設定 5. Unicornの起動12年9月29日土曜日
  • Nginxの設定 • リバースプロキシとして動作 • 静的ファイルには直接アクセス (Unicornに問い合わせない)12年9月29日土曜日
  • upstream app-server { server 127.0.0.1:8080; } server { listen 80; server_name hogehoge.falconsrv.net; root /PATH/TO/APP/public; try_files $uri $uri/index.html @unicorn; location @unicorn { proxy_pass http://app-server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 20; } }12年9月29日土曜日
  • Unicornの設定 • デプロイ時のダウンタイムがゼロにな るようにする • ワーカーごとにプログラムを読み込ま ないようにする12年9月29日土曜日
  • RAILS_APP/config/unicorn.rb worker_processes 2 listen 8082 pid tmp/pids/unicorn.pid stdout_path log/unicorn.log stderr_path log/unicorn.log timeout 30 preload_app true12年9月29日土曜日
  • before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end sleep 1 end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end12年9月29日土曜日
  • この周りはあまり 詳しくないので こちらへ… https://github.com/blog/517-unicorn http://techracho.bpsinc.jp/piichan1031/2010_07_09/207512年9月29日土曜日
  • Unicornの制御12年9月29日土曜日
  • Unicornの起動 production環境でデーモンとして動作 > unicorn -c config/unicorn.rb -D -E production12年9月29日土曜日
  • Unicornの設定のリロード HUPシグナルをmasterプロセスに送る > kill -HUP `cat tmp/pids/unicorn.pid` config/unicorn.rbを変更した時などに実行 例)ワーカー数を増やしたときなど ダウンタイムゼロ12年9月29日土曜日
  • Unicornの再起動 USR2シグナルをmasterプロセスに送る > kill -USR2 `cat tmp/pids/unicorn.pid` プログラムコードの変更を適用する ダウンタイムゼロ12年9月29日土曜日
  • Unicornの終了 QUITシグナルをmasterプロセスに送る > kill -QUIT `cat tmp/pids/unicorn.pid` すべてのリクエストを処理し終えてから終了する12年9月29日土曜日
  • Unicornの強制終了 INTシグナルをmasterプロセスに送る > kill -INT `cat tmp/pids/unicorn.pid` リクエストの処理をすべて中断し, 直ちに終了する12年9月29日土曜日
  • まとめ • Railsのデプロイはちょっと手間がかかる • 使える組み合わせが多い • Unicornは設定をしないとダウンタイムゼ ロにならないので注意 • Railsは楽しいです12年9月29日土曜日
  • 宣伝12年9月29日土曜日
  • 再来週(13,14日) 高専プロコンに 出場します! http://www.procon.gr.jp/12年9月29日土曜日
  • 長野高専の出場チーム • 自由部門「TERAKOYA」 • 5年生4名,専攻科2年生1名 • 自由部門「みんなのそろばん」 • 1年生1名,2年生3名,3年生1名 • 競技部門 • 4年生3人12年9月29日土曜日
  • 10/20, 21(土, 日) 長野高専 工嶺祭でも 展示予定 ぜひお越しください!12年9月29日土曜日