20140425 ruby conftaiwan2014
TRANSCRIPT
![Page 1: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/1.jpg)
!
From ‘Legacy' to ‘Edge' 2014 edition
!
Hiroshi SHIBATA @hsbt
RubyConfTaiwan 2014
![Page 2: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/2.jpg)
Thank you!
![Page 3: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/3.jpg)
SHIBATA Hiroshi(@hsbt)
![Page 4: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/4.jpg)
Ruby Committer
![Page 6: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/6.jpg)
Rails Girls in Japan
![Page 7: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/7.jpg)
asakusa.rb
![Page 8: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/8.jpg)
![Page 9: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/9.jpg)
ミドルウェアのアップグレード
社内開発基盤の構築
統計基盤の構築JSOXの運用整備
github
セキュリティ監査コードレビューテスト基盤の構築
アクセス解析基盤の構築
開発プロセス
新人教育原稿執筆
カンファレンス発表
OSS開発 サーバー構成管理の刷新
リーンスタートアップ
Jenkins
Ruby/Rails
RDBMS
技術基盤チーム
![Page 11: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/11.jpg)
from 2008/4
![Page 12: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/12.jpg)
380,000 users
230,000,000 photos
![Page 13: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/13.jpg)
Our Rails app
46 models
5000 lines in controllers
400 lines in routes.rb
1:1.3 code to test ratio
![Page 14: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/14.jpg)
system architecture
![Page 15: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/15.jpg)
application server
![Page 16: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/16.jpg)
storage server
![Page 17: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/17.jpg)
job server
![Page 18: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/18.jpg)
transaction server
![Page 19: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/19.jpg)
storage is over 450 TB
![Page 20: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/20.jpg)
database size is over 250 GB
![Page 21: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/21.jpg)
Development Culture
![Page 22: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/22.jpg)
github workflow
![Page 23: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/23.jpg)
IRC
github issue
costomer’s contact
nagios
![Page 24: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/24.jpg)
DevOps
![Page 25: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/25.jpg)
4 deploy/day
![Page 26: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/26.jpg)
![Page 27: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/27.jpg)
How to migrate edge rails
from legacy rails?
![Page 28: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/28.jpg)
Ruby 1.8.6
Rails 2.0.2
![Page 29: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/29.jpg)
Ruby 1.8.6Rails 2.0.2
Ruby 2.1.1Rails 4.1.0 new!
![Page 30: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/30.jpg)
Why?
![Page 31: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/31.jpg)
![Page 32: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/32.jpg)
Ruby on Rails
![Page 33: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/33.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 34: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/34.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0Slow
Fast
![Page 35: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/35.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 36: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/36.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 37: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/37.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 38: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/38.jpg)
Rails 2.0
Rails 2.3
![Page 39: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/39.jpg)
Rails 2.0
Rails 2.3
hotfix A
migration A
![Page 40: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/40.jpg)
Rails 2.0
Rails 2.3
hotfix A
migration A
![Page 41: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/41.jpg)
Rails 2.0
Rails 2.3
hotfix A
migration A
![Page 42: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/42.jpg)
![Page 43: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/43.jpg)
Zero Downtime
Deploy
![Page 44: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/44.jpg)
cookpad/kage
![Page 45: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/45.jpg)
Kage (kah-geh) is an HTTP shadow proxy server that sits between clients and your server(s) to enable "shadow requests".
![Page 46: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/46.jpg)
the basic of kage
real request
![Page 47: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/47.jpg)
![Page 48: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/48.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 49: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/49.jpg)
rails 2.3 with bundler
![Page 50: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/50.jpg)
source 'https://rubygems.org'!!gem 'rails', '~> 2.3.18'!gem 'rake', '~> 0.9.2'!gem 'rdoc'!gem 'rake-confirm'!!gem 'mysql'!gem "mysql_retry_lost_connection"!gem 'acts_as_paranoid', :github => 'paperboy-30days/acts_as_paranoid'!gem 'passenger', '~> 3.0'!gem 'memcache-client', :require => 'memcache'!gem 'system_timer'!gem 'yajl-ruby', :require => 'yajl'!gem 'will_paginate', '~> 2.3'!gem 'mail'!!gem 'sass'!gem 'compass-rails'!!gem 'osaipo_client', :git => '[email protected]:paperboy-all/osaipo_client.git', :branch => 'legacy'!gem 'jugem_client', :git => '[email protected]:paperboy-all/jugem_client.git'!gem 'ppb_footer', :github => 'paperboy-all/ppb_footer'!
![Page 51: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/51.jpg)
require "./config/environment"!!use Rails::Rack::LogTailer!use Rails::Rack::Static!run ActionController::Dispatcher.new
rack with rails 2.3
![Page 52: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/52.jpg)
30days-frontcan’t use hyphen
can’t use number
can’t convert !application.rb...
![Page 53: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/53.jpg)
Reduce customer frustration.
![Page 54: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/54.jpg)
app1
app2
backgroundrb to dj
![Page 55: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/55.jpg)
![Page 56: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/56.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 57: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/57.jpg)
Use trunk everyday.
![Page 58: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/58.jpg)
![Page 59: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/59.jpg)
![Page 60: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/60.jpg)
1.8 to 2.0
![Page 61: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/61.jpg)
![Page 62: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/62.jpg)
2.0 to 2.1
![Page 63: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/63.jpg)
CPU
Usa
ge(%
)
0
25
50
75
100
49
69
2.0 2.1
![Page 64: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/64.jpg)
Resp
. tim
e(m
s)
0
50
100
150
200
250
189
221
2.0 2.1
![Page 65: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/65.jpg)
mem
ory
usag
e(gi
ga b
yte)
0
1
2
3
4
3.8
3.2
2.0 2.1
![Page 66: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/66.jpg)
https://www.ruby-lang.org/en/news/2014/03/10/regression-of-hash-reject-in-ruby-2-1-1/
![Page 67: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/67.jpg)
Ruby1.8.6 1.8.7 1.9.3 2.0.0 2.1
Rails
2.0/2.1
2.3
3.0
3.2
4.0
![Page 68: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/68.jpg)
![Page 69: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/69.jpg)
Use modern architecture
![Page 70: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/70.jpg)
app1
app2
![Page 71: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/71.jpg)
kyoto tycoon is slower than mysql…
![Page 72: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/72.jpg)
![Page 73: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/73.jpg)
Resp
. tim
e(m
s)
0
60
120
180
240
300
287
189
3.2 4.0
![Page 74: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/74.jpg)
Ruby
1.9.3 2.0.0 2.1 2.2
Rails
3.0
3.2 ?4.0 ?4.1 ?
![Page 75: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/75.jpg)
Ruby
1.9.3 2.0.0 2.1 2.2
Rails
3.0
3.2 ?4.0 ?4.1 ?
New!!
![Page 76: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/76.jpg)
![Page 77: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/77.jpg)
1. Flash structure changes
2. Mutator methods called on Relation
![Page 78: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/78.jpg)
![Page 79: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/79.jpg)
Resp
. tim
e(m
s)
0
60
120
180
240
300
266287
4.0 4.1
![Page 80: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/80.jpg)
Ruby
1.9.3 2.0.0 2.1 2.2
Rails
3.0
3.2 ?4.0 ?4.1 ?
![Page 81: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/81.jpg)
class Bar! def bar(foo = foo())! foo! end!! def buzz(foo = foo)! foo! end!! def foo! :buzz! end!end!!p Bar.new.bar!p Bar.new.buzz
![Page 82: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/82.jpg)
% ruby -v r45272.rb!ruby 2.2.0dev (2014-04-13 trunk 45580) [x86_64-darwin13]!:buzz!nil!!% ruby -v r45272.rb!ruby 2.1.2p80 (2014-03-01 revision 45231) [x86_64-darwin13.0]!:buzz!:buzz
![Page 83: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/83.jpg)
![Page 84: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/84.jpg)
conclusion
![Page 85: 20140425 ruby conftaiwan2014](https://reader033.vdocuments.mx/reader033/viewer/2022060119/558cc174d8b42a061a8b45a9/html5/thumbnails/85.jpg)
2. fix gem
4. fix Ruby3. fix Rails
1. fix your code