Railsデプロイ

4,236 views
4,184 views

Published on

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

Published in: Technology
2 Comments
6 Likes
Statistics
Notes
No Downloads
Views
Total views
4,236
On SlideShare
0
From Embeds
0
Number of Embeds
1,288
Actions
Shares
0
Downloads
9
Comments
2
Likes
6
Embeds 0
No embeds

No notes for slide

Railsデプロイ

  1. 1. NSEG #31 Railsデプロイ 長野高専 電子情報工学科 3年 奥本 隼12年9月29日土曜日
  2. 2. 11時に起きました12年9月29日土曜日
  3. 3. 今日 NSEGがあることを 知りました12年9月29日土曜日
  4. 4. 枠が空いてる? Railsの発表しよう かな?12年9月29日土曜日
  5. 5. 現在に至る12年9月29日土曜日
  6. 6. 自己紹介 • 奥本 隼(おくもと はやと) • 長野高専 電子情報工学科 3年 • NSEGでの発表は2回目 • Ruby / Rails / Vim / Linux etc... • Twitter: falcon_8823, Facebook: falcon.882312年9月29日土曜日
  7. 7. こんなものを 作っています12年9月29日土曜日
  8. 8. イベント開催システム 「カンファイン」 http://conf-in.com12年9月29日土曜日
  9. 9. 寮食堂の献立配信システム 「Ryo-Lunch」 http://ryo-lunch.jo-ken.info12年9月29日土曜日
  10. 10. 夏休みカウントダウン 「夏休みはあとn日しかない」 http://ndays.falconsrv.net12年9月29日土曜日
  11. 11. Railsデプロイ12年9月29日土曜日
  12. 12. 内容 • Rackについて • Unicorn & Nginxを使った構成 • 手動でデプロイ • Capistranoを使った自動デプロイ(次回)12年9月29日土曜日
  13. 13. Railsのデプロイは面倒? • 設置してパーミッションを設定する • だけではない... • Webサーバとアプリケーションサーバ (Rackサーバ)が必要 • トータルすると設定量が多いかも…?12年9月29日土曜日
  14. 14. Rails本番環境の構成 Webサーバ (Apache, Nginx) Rackサーバ Rails アプリケーション12年9月29日土曜日
  15. 15. Rackとは?12年9月29日土曜日
  16. 16. Rackとは? • サーバとフレームワークをつなぐ    インターフェース • サーバ,フレームワーク共にRackに対応 していれば,組み合わせは自由 • フレームワーク:Rails, Sinatra, etc...12年9月29日土曜日
  17. 17. Rack対応サーバ • WEBRick • Passenger • Mongrel • Thin • Unicorn12年9月29日土曜日
  18. 18. Unicorn • クックパッドやGithubでも採用 • 軽い(メモリをあまり食わない) • デプロイ時のダウンタイムゼロ • Passengerとかだと10秒ぐらいダウン タイムが生じる12年9月29日土曜日
  19. 19. 構成例12年9月29日土曜日
  20. 20. できるだけ軽い構成で •Webサーバ:Nginx • Rackサーバ:Unicorn12年9月29日土曜日
  21. 21. 構成図 Nginx Unicon Rails アプリケーション12年9月29日土曜日
  22. 22. 手動でデプロイ12年9月29日土曜日
  23. 23. 大まかな手順 1. アプリケーションを設置(nginxがアク セスできるパーミッションで) 2. gem install unicorn 3. DBの作成,nginxの設定など 4. Unicornの設定 5. Unicornの起動12年9月29日土曜日
  24. 24. Nginxの設定 • リバースプロキシとして動作 • 静的ファイルには直接アクセス (Unicornに問い合わせない)12年9月29日土曜日
  25. 25. 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日土曜日
  26. 26. Unicornの設定 • デプロイ時のダウンタイムがゼロにな るようにする • ワーカーごとにプログラムを読み込ま ないようにする12年9月29日土曜日
  27. 27. 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日土曜日
  28. 28. 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日土曜日
  29. 29. この周りはあまり 詳しくないので こちらへ… https://github.com/blog/517-unicorn http://techracho.bpsinc.jp/piichan1031/2010_07_09/207512年9月29日土曜日
  30. 30. Unicornの制御12年9月29日土曜日
  31. 31. Unicornの起動 production環境でデーモンとして動作 > unicorn -c config/unicorn.rb -D -E production12年9月29日土曜日
  32. 32. Unicornの設定のリロード HUPシグナルをmasterプロセスに送る > kill -HUP `cat tmp/pids/unicorn.pid` config/unicorn.rbを変更した時などに実行 例)ワーカー数を増やしたときなど ダウンタイムゼロ12年9月29日土曜日
  33. 33. Unicornの再起動 USR2シグナルをmasterプロセスに送る > kill -USR2 `cat tmp/pids/unicorn.pid` プログラムコードの変更を適用する ダウンタイムゼロ12年9月29日土曜日
  34. 34. Unicornの終了 QUITシグナルをmasterプロセスに送る > kill -QUIT `cat tmp/pids/unicorn.pid` すべてのリクエストを処理し終えてから終了する12年9月29日土曜日
  35. 35. Unicornの強制終了 INTシグナルをmasterプロセスに送る > kill -INT `cat tmp/pids/unicorn.pid` リクエストの処理をすべて中断し, 直ちに終了する12年9月29日土曜日
  36. 36. まとめ • Railsのデプロイはちょっと手間がかかる • 使える組み合わせが多い • Unicornは設定をしないとダウンタイムゼ ロにならないので注意 • Railsは楽しいです12年9月29日土曜日
  37. 37. 宣伝12年9月29日土曜日
  38. 38. 再来週(13,14日) 高専プロコンに 出場します! http://www.procon.gr.jp/12年9月29日土曜日
  39. 39. 長野高専の出場チーム • 自由部門「TERAKOYA」 • 5年生4名,専攻科2年生1名 • 自由部門「みんなのそろばん」 • 1年生1名,2年生3名,3年生1名 • 競技部門 • 4年生3人12年9月29日土曜日
  40. 40. 10/20, 21(土, 日) 長野高専 工嶺祭でも 展示予定 ぜひお越しください!12年9月29日土曜日

×