狠狠撸

狠狠撸Share a Scribd company logo
Real World Rails
Without tools he is nothing, with tools he is all. -Thomas Carlyle

2012/3/30 yoyogi.rb
自己紹介

フリーエンジニア

Rails歴4年くらい

twitter:@nysalor
blog: http://blog.larus.jp/
Real World?


周辺ツールやノウハウなど

開発編

運用編
開発編
Development
Mac
Mac
Mac
Mac



Rubyが最初から入っている
Mac



Rubyが最初から入っている
Mac



Rubyが最初から入っている
Mac



Rubyが最初から入っている

ような気がしていたが別にそんなことはなかったぜ!
Mac
Mac
Mac

   最初から入っているRubyは1.8.7(Lion)

> /usr/bin/ruby -v

ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

   結局は入れ直し(homebrew,rvmなど)

   Railsも入ってるけど2.3.3とかそのへん
Mac
Mac
Mac

それでもなお便利

Xcodeで開発環境は一発

UNIXコマンドが大抵使える

TimeMachine
rvm/rbenv
rvm/rbenv
RVM http://beginrescueend.com/
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv

 複数バージョンのRubyを同居

 「前のバージョン用のgemを使ってしまった」を防ぐ

 開発?運用環境で同じRubyを使うメリット
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv

 RVMが主流→最近はrbenvが流行

 RVMは多機能だけど何度かやらかした

 rbenvは実行ファイルにやや癖がある
screen/tmux
screen/tmux
screen/tmux
screen/tmux
screen/tmux
ターミナルマルチプレクサ

irb,logなど複数のシェルを行き来するのに便利

落ちても再起動するまでセッションが消えない

設定がけっこう大変

Terminal/iTermのタブでいいんじゃない?
git
git

 分散リポジトリ

 学習コストが高い?

 svnに慣れすぎていなければ平気

 githubやherokuでどっちみち必要
sourcetree
sourcetree
http://www.sourcetreeapp.com/
sourcetree
http://www.sourcetreeapp.com/
sourcetree
http://www.sourcetreeapp.com/




                          見やすい
                          多機能(っぽいけどあまり使ってない)
                          登録必要だけど無料
gitx
gitx
       http://gitx.frim.nl/
gitx
       http://gitx.frim.nl/
gitx
       http://gitx.frim.nl/




                              軽い
                              機能少ない
                              diff見るだけなら十分
github
github
   http://github.com/
github
   http://github.com/
github
   http://github.com/




                        githubでいいんじゃね?
                        プライベートリポジトリは有料
                        ネットがないと使えない
やっぱり颁鲍滨
やっぱり颁鲍滨


GUIはdiff見たり検索するだけ

どっちみちCUIの操作は必要

苦手な人は覚えましょう
エディタ
エディタ
エディタ
エディタ
エディタ


Emacs
Vim
TextMate
Emacs
Emacs


Cocoa Emacs(自分でビルド)

inline-patch
full screen
Emacs
Emacs

ruby-mode
ruby-electric
rinari
etags
auto-complete
Emacs
Emacs
Emacs
Emacs
Emacs


設定をDropboxに置く

起動したらずっとそのまま

export EDITOR=emacsclient
Pow
Pow
      http://pow.cx/
Pow
      http://pow.cx/
Pow
      http://pow.cx/
Pow
      http://pow.cx/
Pow
      http://pow.cx/


いちいちrails serverしなくてもいい

http://xxxx.devでアクセスできる

複数プロジェクトの同時開発に対応
Pow
      http://pow.cx/
Pow
      http://pow.cx/
Pow
        http://pow.cx/


gem install powder
powder -rでサーバ再起動

powder applog,powder linkなど
guard
guard
https://github.com/guard/guard
guard
https://github.com/guard/guard

TDD
ファイルが更新されると自動実行

いちいちrspecを実行するとサボりがち

coffee scriptの開発などにも使える

autospecというのもある
spork
spork
https://github.com/sporkrb/spork
spork
https://github.com/sporkrb/spork



分散テスト

同時に複数のテストが実行される

データベースを初期化する仕組みが不可欠
capistrano
capistrano
 https://github.com/capistrano/capistrano
capistrano
 https://github.com/capistrano/capistrano



デプロイツール

サーバへのアップロードから再起動まで全て自動化

環境ごとにデプロイ先やタスクを切り替えられる
capistrano
 https://github.com/capistrano/capistrano
capistrano
 https://github.com/capistrano/capistrano
capistrano
 https://github.com/capistrano/capistrano

   リポジトリからコードをダウンロード
capistrano
 https://github.com/capistrano/capistrano

   リポジトリからコードをダウンロード


        リビジョンごとのディレクトリに展開
capistrano
 https://github.com/capistrano/capistrano

   リポジトリからコードをダウンロード


        リビジョンごとのディレクトリに展開


            ログ?静的ファイル等をリンク
capistrano
 https://github.com/capistrano/capistrano

   リポジトリからコードをダウンロード


        リビジョンごとのディレクトリに展開


            ログ?静的ファイル等をリンク


                 必要なgem、rails自体のインストール
capistrano
 https://github.com/capistrano/capistrano

   リポジトリからコードをダウンロード


        リビジョンごとのディレクトリに展開


            ログ?静的ファイル等をリンク


                 必要なgem、rails自体のインストール


                     サービスを再起動
capistrano
 https://github.com/capistrano/capistrano
capistrano
 https://github.com/capistrano/capistrano



サーバ側にcapistranoは不要

rails含めgemは一切不要

ただしrubyとbundlerだけは必要
運用編
Operation
rvm/rbenv
rvm/rbenv
RVM http://beginrescueend.com/
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv
rvm/rbenv
RVM http://beginrescueend.com/

rbenv https://github.com/sstephenson/rbenv



 なるべくサーバ側にも入れておくべき

 gemの管理はbundlerがやってくれるので不要
サーバ构成
サーバ构成


   奥奥奥サーバ(フロントエンド)
サーバ构成


   奥奥奥サーバ(フロントエンド)


     バックエンドサーバ
サーバ构成


   奥奥奥サーバ(フロントエンド)


     バックエンドサーバ


        DBサーバ
サーバ构成


   奥奥奥サーバ(フロントエンド)


     バックエンドサーバ

                     Rails本体
        DBサーバ
サーバ构成
 ロードバランサ


     奥奥奥サーバ(フロントエンド)


       バックエンドサーバ

                       Rails本体
           DBサーバ
サーバ构成
 ロードバランサ               キャッシュサーバ


     奥奥奥サーバ(フロントエンド)


       バックエンドサーバ

                         Rails本体
           DBサーバ
バックエンド
バックエンド
Unicorn
thin
Rainbows!
mongrel
Webrick
Passenger
バックエンド
バックエンド
バックエンド


適当なポートで待ち受ける

フロントエンドからリバースプロキシで接続
バックエンド
バックエンド
バックエンド
 フロントエンドを挟む理由
バックエンド
 フロントエンドを挟む理由




静的コンテンツ(画像など)をいちいちRailsで処理する
のは馬鹿げている
バックエンド
バックエンド
バックエンド
奥奥奥サーバ(フロントエンド)
バックエンド
奥奥奥サーバ(フロントエンド)
バックエンド
奥奥奥サーバ(フロントエンド)




  バックエンドサーバ
バックエンド
奥奥奥サーバ(フロントエンド)




  バックエンドサーバ
バックエンド
奥奥奥サーバ(フロントエンド)




  バックエンドサーバ
バックエンド
奥奥奥サーバ(フロントエンド)




  バックエンドサーバ
バックエンド
                   静的コンテンツは

奥奥奥サーバ(フロントエンド)   フロントエンドが直接処理




  バックエンドサーバ
Unicorn
Unicorn
http://unicorn.bogomips.org/
Unicorn
http://unicorn.bogomips.org/
Unicorn
http://unicorn.bogomips.org/


定番

高速

ダウンタイムなしで再起動可能

worker1つにつき1リクエスト
その他
その他

  Thin
その他

  Thin

      http://code.macournoyer.com/thin/
その他

    Thin

      http://code.macournoyer.com/thin/

  Rainbows!
その他

    Thin

      http://code.macournoyer.com/thin/

  Rainbows!

        http://rainbows.rubyforge.org/
その他

    Thin

      http://code.macournoyer.com/thin/

  Rainbows!

        http://rainbows.rubyforge.org/


                 よく知りません
あまり使わない
あまり使わない
mongrel
Webrick
あまり使わない
mongrel
Webrick

     开発时のサーバとしては使う
Passenger
Passenger
 http://www.modrails.com/
Passenger
 http://www.modrails.com/

“mod_rails”
バックエンドプロセスが不要

基本的にApacheのみ

立ち上がりが遅い

メモリひかえめ
フロントエンド
フロントエンド

 基本的に何でもOK
フロントエンド

        基本的に何でもOK



Apache
nginx
lighthttpd
nginx
nginx
  http://wiki.nginx.org/
nginx
  http://wiki.nginx.org/
nginx
  http://wiki.nginx.org/


高速

設定が楽

Apacheのような細かいアクセス制御は不可能

バックエンドに投げるだけなら最適
Apache
Apache
Apache


Railsだけ動かすには大きすぎる

他のコンテンツと共存するなら必須の場合も

Apacheを使うならPassengerを検討する
データベース
データベース


MySQL
PgSQL
Sqlite3
データベース
  ActiveRecordが差を吸収する




MySQL
PgSQL
Sqlite3
データベース
  ActiveRecordが差を吸収する




MySQL
PgSQL
Sqlite3

          NoSQL
memcached
memcached


参照系がほとんどであれば効果は出る

他の方法で解決できるならするべき

ページキャッシュだけならVarnishの方が楽
Varnish
Varnish
https://www.varnish-cache.org/
Varnish
https://www.varnish-cache.org/
Varnish
https://www.varnish-cache.org/

透過型httpキャッシュサーバ

zero con?gでも動く

パラメータやcookieごとキャッシュする
Varnish
https://www.varnish-cache.org/
Varnish
https://www.varnish-cache.org/
Varnish
https://www.varnish-cache.org/


SSLを処理できない

POSTをGETに書き換えてしまうことがある

DSLがやや難解
构成例
构成例

  nginx+unicorn+varnish
构成例

   nginx+unicorn+varnish
                              SSLあり



  nginx   varnish   unicorn
构成例

    nginx+unicorn+varnish
                                SSLあり



  nginx     varnish   unicorn
                                SSLなし



  varnish   nginx     unicorn
构成例
构成例

      apache+passenger
构成例

      apache+passenger

       apache
                passenger
构成例

      apache+passenger

       apache
                passenger



      apache+unicorn
构成例

      apache+passenger

       apache
                passenger



      apache+unicorn


      apache    unicorn
构成例
构成例

  apache+nginx+unicorn
构成例

    apache+nginx+unicorn


  apache   nginx   unicorn
构成例

    apache+nginx+unicorn


  apache   nginx   unicorn


   apache+varnish+unicorn
构成例

    apache+nginx+unicorn


  apache   nginx     unicorn


   apache+varnish+unicorn


  apache   varnish   unicorn
质疑応答
质疑応答

if available?
??Question.all.map(&:answer!)
end
ご清聴ありがとうございました

More Related Content

Real world rails

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n