Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
From 'Legacy' to 'Edge' 2014 edition
Search
SHIBATA Hiroshi
April 19, 2014
Technology
6.2k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
From 'Legacy' to 'Edge' 2014 edition
SHIBATA Hiroshi
April 19, 2014
More Decks by SHIBATA Hiroshi
See All by SHIBATA Hiroshi
How to make faster release cycle of Ruby?
hsbt
2
6.2k
Ruby の開発を支えるエコシステム
hsbt
4
2.4k
Why is building the Ruby environment hard?
hsbt
6
8.4k
開発環境へのこだわり
hsbt
16
12k
OSS ことはじめ
hsbt
5
1.5k
GMO DevNight 05 在宅勤務開始から2ヶ月でやったこと
hsbt
2
590
Development Environment 2019
hsbt
1
380
How to become the Psychic
hsbt
0
2.1k
Software Development
hsbt
1
6.7k
Other Decks in Technology
See All in Technology
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.3k
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
110
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
640
脆弱性対応、どこで線を引くか
rymiyamoto
1
380
新しいVibe Codingと”自走”について
watany
6
310
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
160
【NRUG vol.18】なぜ多くのオブザーバビリティ導入は失敗するのか
nrug_member
0
120
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
1.9k
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
160
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
140
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
170
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
150
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
107
250k
The browser strikes back
jonoalderson
0
1.2k
The Curious Case for Waylosing
cassininazir
1
380
Six Lessons from altMBA
skipperchong
29
4.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Design in an AI World
tapps
1
240
Claude Code のすすめ
schroneko
67
230k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
The Language of Interfaces
destraynor
162
27k
Music & Morning Musume
bryan
47
7.2k
Transcript
! From ‘Legacy' to ‘Edge' 2014 edition ! Hiroshi SHIBATA
@hsbt OedoRubyKaigi04
SHIBATA Hiroshi(@hsbt)
asakusa.rb
ruby-lang.org
Rails Girls in Japan
Ruby Committer
None
ϛυϧΣΞͷΞοϓάϨʔυ ࣾ։ൃج൫ͷߏங ౷ܭج൫ͷߏங +409ͷӡ༻උ HJUIVC ηΩϡϦςΟࠪ ίʔυϨϏϡʔ ςετج൫ͷߏங ΞΫηεղੳج൫ͷߏங ։ൃϓϩηε
৽ਓڭҭ ݪߘࣥච ΧϯϑΝϨϯεൃද 044։ൃ αʔόʔߏཧͷ৽ ϦʔϯελʔτΞοϓ +FOLJOT 3VCZ3BJMT 3%#.4 ٕज़ج൫νʔϜ
http://30d.jp
from 2007/5
380,000 users 230,000,000 photos
Our Rails app 46 models 5000 lines in controllers 400
lines in routes.rb 1:1.3 code to test ratio
system architecture
application server
storage server
job server
transaction server
storage is over 450 TB
database size is over 250 GB
Development Culture
จࣈ github workflow
IRC github issue costomer’s contact nagios
DevOps
4 deploy/day
None
How to migrate edge rails from legacy rails?
Ruby 1.8.6 Rails 2.0.2
Ruby 1.8.6 Rails 2.0.2 Ruby 2.1.1 Rails 4.1.0 new!
Why?
None
Ruby on Rails
Ruby 1.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
Ruby 1.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 Slow Fast
Ruby 1.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
Ruby 1.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
Ruby 1.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
Rails 2.0 Rails 2.3
Rails 2.0 Rails 2.3 hotfix A migration A
Rails 2.0 Rails 2.3 hotfix A migration A
Rails 2.0 Rails 2.3 hotfix A migration A
จࣈ
Zero Downtime Deploy
cookpad/kage
Kage (kah-geh) is an HTTP shadow proxy server that sits
between clients and your server(s) to enable "shadow requests".
the basic of kage real request
None
_ਓਓ ਓਓ__ਓਓ ਓਓ_! > ಥવͷαʔόʔ࠶ىಈ <! ʉY^Y^Y^YY^Y^Y^YY^Y
Ruby 1.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
rails 2.3 with bundler
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'!
require "./config/environment"! ! use Rails::Rack::LogTailer! use Rails::Rack::Static! run ActionController::Dispatcher.new rack
with rails 2.3
30days-front can’t use hyphen can’t use number can’t convert !
application.rb...
Reduce customer frustration.
app1 app2 backgroundrb to dj
จࣈ
Ruby 1.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
Use trunk everyday.
จࣈ
จࣈ
Use modern architecture
app1 app2
kyoto tycoon is slower than mysql…
None
1.8 to 2.0
จࣈ
2.0 to 2.1
CPU Usage(%) 0 25 50 75 100 49 69 2.0
2.1
Resp. time(ms) 0 50 100 150 200 250 189 221
2.0 2.1
memory usage(giga byte) 0 1 2 3 4 3.8 3.2
2.0 2.1
จࣈ https://www.ruby-lang.org/en/news/2014/03/10/regression-of-hash-reject-in-ruby-2-1-1/
Ruby 1.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
จࣈ
Resp. time(ms) 0 60 120 180 240 300 287 189
3.2 4.0
Ruby 1.9.3 2.0.0 2.1 2.2 Rails 3.0 3.2 ? 4.0
? 4.1 ?
Ruby 1.9.3 2.0.0 2.1 2.2 Rails 3.0 3.2 ? 4.0
? 4.1 ? New!!
จࣈ
1. Flash structure changes 2. Mutator methods called on Relation
จࣈ
Resp. time(ms) 0 60 120 180 240 300 266 287
4.0 4.1
Ruby 1.9.3 2.0.0 2.1 2.2 Rails 3.0 3.2 ? 4.0
? 4.1 ?
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
% 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
จࣈ
conclusion
2. fix gem 4. fix Ruby 3. fix Rails 1.
fix your code