SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Railsバージョンアップを
段階的に⾏うために
Rails3/4並⾏稼動させる仕組み
を作ってる話
Rails Upgrade Casual Talks
2016/03/28
@minamijoyo
⾃⼰紹介
•  森⽥ 真之 (Masayuki Morita)
•  Twitter: @minamijoyo
•  GitHub: minamijoyo
•  CrowdWorks Inc.
•  インフラ周りの改善してる
•  最近はRails3.2=>4.2アップ
デートの検証中
はじめに
•  今⽇お話すること
•  複数Railsバージョンを並⾏稼動させる取り組み
•  なぜ並⾏稼動させるのか
•  開発フロー(ブランチの運⽤)
•  並⾏稼動の仕組み
•  Gemfileの共存
•  リクエストの振分
•  Rails3.2/4.2を並⾏稼動のハマりポイント
•  リクエストの互換性、データの互換性
•  もうすぐproduction投⼊するので忘れてそうなのあれば教
えて下さい
•  今⽇お話しないこと
•  Rails5
CrowdWorks
•  ⽇本最⼤級のクラウドソーシングサービス
•  2012年3⽉〜サービス開始
•  会員数85万⼈、発注クライアント数12万社
CrowdWorksシステム概要
Found
(Elasticsearch)
RDS
(MySQL)
ElastiCache
(memchached)
EC2ELB
•  システム構成はよくあるWebサービス
•  Railsはまだ3.2系が稼働している
なぜ並⾏稼動させるのか
•  ひとことで⾔うと⼩さくリリースしていきたい
•  ⼀発バージョンアップはリスキー
•  問題の原因は特定できてもすぐ対応が難しいものもある
•  モンキーパッチしてる箇所など
•  バージョン依存のバグ修正を黙々してると⾃信をなくす
•  ⾃動テストで⾒つけづらいバグもある
•  アセットの読み込みに起因する問題、データに起因する問題
•  最終的な確認としてある程度は⽬視で確認したい
•  全機能を⼀度に稼働確認するの⼤変
•  アプリケーションとしては業務系システムに近い
•  仕事マッチング以外にも細々した機能がたくさんある
•  サービス開発を全部⽌めるわけにもいかない
•  Railsバージョン上げる度に毎回開発⽌めるの?
開発フロー
•  基本⽅針
•  Railsバージョンアップ対応の修正は互換性を保ち
つつどんどんmasterブランチに⼊れていく
•  差分が⼤きくなりすぎるとマージできなくなる
ブランチ運⽤
master
develop
rails4
feature-XXX
rails4-XXX
Production環境
staging環境
Rails3⽤テスト環境
⼀⽇数回マージ
してデプロイ
機能開発/バグ修正
バージョンアップ起因のバグ修正
rebaseして追いつき
マージ
Rails4⽤テスト環境
•  master: production環境にデプロイされてるもの
•  develop: メインの開発ブランチ
•  rails4: Rails4対応⽤の作業ブランチ
•  Rails3/4⽤テスト環境をそれぞれ⽤意し、同じリビジョンをデプ
ロイして挙動を⽐較できるようにする
•  随時developブランチでrebaseして最近の変更も取り込み
•  修正の稼働確認できたら適宜developにマージ
CIによる⾃動テスト
•  master/develop/rails4ブランチ
•  Rails3/4両⽅でCIによる⾃動テストでクロスビルド
•  トピックブランチ
•  デフォルトRails3でビルド
•  CIのリソース効率化、実⾏時間短縮のため
•  ブランチ名の⼀部にrails4が含まれるとRails3/4両⽅でビルド
•  Rails4対応の修正はマージ前にテストしたい
複数のGemfileを共存させる
•  Gemfileを複数⽤意してBUNDLE_GEMFILE変数で制御
•  Gemfile: Rails3⽤
•  gemfiles/rails4.gemfile: Rails3/4の差分
•  Rails3でしか使わないgemをリストから削除
•  Gitリポジトリをしているものはsourceからも削除
•  Rails4でしか使わないgemをリストに追加
gemfiles/rails4.gemfileの例
# Rails3⽤のGemfileを読み込み
eval_gemfile File.expand_path(File.join(File.dirname(__FILE__), '../Gemfile'))
# Rails3でしか使わないものをリストから削除
ignored_gems = %w(
rails
…
)
dependencies.delete_if do |g|
# Rails 4では:assetsグループは廃⽌される
ignored_gems.include?(g.name) || g.groups.include?(:assets)
End
# git リポジトリを指定しているものはsourceからも削除
ignored_git_source_uris = %w(
git://github.com/xxxxx/xxxxx.git
)
@sources.git_sources.delete_if do |source|
ignored_git_source_uris.include?(source.uri)
end
# Rails4でしか使わないgemをリストに追加
gem 'rails', '~> 4.2.6’
…
BUNDLE_GEMFILEの制御
•  ローカル開発環境は環境変数で切り替えが簡単
•  capistrano
•  現状remote_cacheで各サーバでbundle installしている
•  リモート側の~/.bundle/configに設定すればサーバ単位で
切り替え可能
•  whenever
•  現状バッチはwhenever経由でcrontabを⽣成している
•  job_templateでcronジョブごとにBUNDLE_GEMFILEの
exportを出し分けする
リクエストを振り分ける
•  サーバ単位
•  ロードバランサからトラフィックの⼀部を流すだけで簡単
•  問題あればとりあえずバランサから切り離す
•  機能的には全部⼀発リリース
•  ユーザ単位
•  社内ユーザだけ先⾏リリースができる
•  現状振り分ける仕組みがないので何がしか作りこみが必要
•  問題あっても影響は⼀部ユーザに限定される
•  機能的には全部⼀発リリース
•  URL単位(機能単位)=>これを採⽤
•  稼働確認できた機能から段階的に新バージョンに振り分ける
•  現状振り分ける仕組みがないので何らか作りこみが必要
•  機能ごとにちょっとずつテストしてリリースできる
•  問題あっても機能ごとに切り戻しできる
•  今後も同じような段階リリースしていくのに便利そう
並⾏稼動のシステム構成
•  Rails3/4⽤のサーバ群をそれぞれ⽤意
•  前段にnginxによるリバプロ層を追加しURLで振り分け
Found
(Elasticsearch)
RDS
(MySQL)
ElastiCache
(memchached)
EC2
ELB
EC2
ELB
ELB
EC2
(nginx)
Rails3
Rails4
リバプロ層
•  基本はURLパスを⾒てどっちに振り分けるかを判断する
•  完全に10:0じゃなくて9:1とか⽐率はnginxのupstreamコ
ンテキストで調整できる
•  両バージョンで発⽣するかどうかの切り分け
•  Rails3しか発⽣しない潜在的な問題があると切り戻しリスク
nginx.confのイメージ
http {
resolver xxx.xxx.xxx.xxx valid=5s;
upstream rails4 {
server unix:/var/run/nginx_rails4.sock weight=9 fail_timeout=60;
server unix:/var/run/nginx_rails3.sock weight=1;
}
upstream rails3 {
server unix:/var/run/nginx_rails3.sock;
}
server {
listen xxxx;
server_name example.com;
...
location / {
proxy_pass http://rails3;
}
location ^~ /hoge/ {
proxy_pass http://rails4;
}
server {
listen unix:/var/run/nginx_rails3.sock;
set $elb_rails3 "xxxx";
...
location / {
proxy_pass http://$elb_rails3:80;
}
server {
listen unix:/var/run/nginx_rails4.sock;
...
}
}
nginxのtips
•  nginxでupstream先にELBを使う場合はDNS解決に注意
•  nginx起動時のIPアドレスがキャッシュされてしまう
•  serverコンテキストならset変数を使うハックで回避可能
•  upstreamコンテキストではresolveオプションは有償
•  upstreamコンテキストで必要な負荷分散しつつ、Unixドメイ
ンソケットを1段挟んで、serverコンテキストでDNS解決すれ
ば無償の範囲でも可能
•  (参考)nginxのupstreamコンテキストで有償のresolveオプション
を使わずに動的にDNS解決する
•  http://qiita.com/minamijoyo/items/183e51a28a3a9d79182f
•  デバッグ⽤にカスタムHTTPヘッダを⾒てRails3/4を指定し
て振り分けるようにしておくと便利
•  (参考)nginxでカスタムHTTPヘッダを⾒てproxy_passを振り分け
る
•  http://qiita.com/minamijoyo/items/3705ad7c9df70e87a953
Rails3/4⽤のサーバ群
•  ELB/EC2/AutoScale/CloudWatch/CodeDeployなど必要な
AWSリソース⼀式をTerraformでモジュール化
•  同じようなサーバ群を簡単に並べて作れるようにする
•  デプロイ⾃動化している箇所の修正とかも必要なので忘れず
•  ホスト名の⼀部にRailsバージョン⼊れるとログが区別しやすい
•  サーバを作って壊せる環境なら雑なネーミングが可能
•  パフォーマンス情報の収集
•  ActiveSupport::Notificationsで
process_action.action_controllerのイベントをフックしてアク
ションごとの実⾏時間などを取得
•  Railsバージョンのタグを付けてDatadogに送りつけておく
•  トラフィック流して⼤幅に劣化してそうだったら、がんば
る。。。
並⾏稼動の考慮ポイント
•  Rails3.2/4.2を並⾏稼動させる上でのハマりポイントの
具体例
•  リクエスト/レスポンスの互換性
•  ルーティング
•  CSRFトークン
•  アセット
•  flash
•  データの互換性(データが保存される場所ごとに考える)
•  Cookie
•  MySQL
•  memcached
•  Elasticsearch
•  データの互換性は、並⾏稼動しなくても⼀発リリース失
敗で旧戻しする場合は考慮が必要
•  キャッシュ系は最悪は再⽣成できるけどDBだけはヤバイ
リクエスト/レスポンスの互換性
•  ルーティング
•  PUT/PATCH
•  ActionDispatchでPUT/PATCH処理にモンキーパッチ
•  並⾏稼動のためRails3/4でPUT/PATCHを同じ扱いにする
•  CSRFトークン
•  Rails4.2で⽣成ロジックが変更されている
•  breach-mitigation-railsをRails3側に⼊れると同じになる
リクエスト/レスポンスの互換性
•  アセット
•  マニフェストの形式が変わった
•  依存ライブラリと結合したjsファイルが同じにならない
•  asset_hostを分けた
•  flash
•  rails_4_session_flash_backport
•  移⾏⽤gemがあるんで⼤丈夫と思ってた時代が私にもありました
•  Rails3.2=>4.2で使うと微妙に実装が変わってる?(確認中)
•  移⾏系のgemはバージョン離れると注意
データの互換性
•  Cookie
•  cookies_serializerがmarshalからjson形式に
•  並⾏稼動中はmarshalに揃える
データの互換性
•  MySQL
•  明⽰的なシリアライズ
•  プレーンなHashとかなら問題ない
•  Modelとかparamsとかをシリアライズすると型が違って死ぬ
•  暗黙のシリアライズ
•  serialize宣⾔していないtextカラムにHashを突っ込むとYAML
だったのがJSONになってる
•  そんなこと良い⼦は普通しないよね?油断してるとある
•  delayed_job
•  Modelをシリアライズするので型が違って死ぬ
•  キュー名で分ける=>LIKE検索の負荷が重くて死ぬ
•  delayed_jobにカラムを追加する
•  時刻の精度
•  MySQL5.6 + Rails4.2で時刻がマイクロ秒精度に
•  秒精度に統⼀
データの互換性
•  Memcached
•  単純な数値や⽂字列とかなら問題ない
•  Modelとか突っ込むと(以下略
•  そんなこと良い⼦は普通(ry
•  ダメな⼦はキーを分ける
•  Elasticsearch
•  JSONコーダの実装が変わってる
•  インデックスすると時刻がミリ秒精度に
•  秒精度に統⼀
•  ActiveSupport::JSON::Encoding.time_precision = 0
•  JSON.dump(Time.now)した結果の時刻フォーマットが違う
•  Ojとか別にJSONコーダを使う
まとめ
•  なぜ並⾏稼動させるのか
•  ⼩さくリリースしたい
•  開発フロー
•  バージョンアップ対応の修正はmaterに⼊れていく
•  並⾏稼動の仕組み
•  複数のGemfileを共存させてBUNDLE_GEMFILEで制御
•  URLパスベースでリクエストを振り分ける
•  Rails3.2/4.2を並⾏稼動のハマりポイント
•  並⾏稼動させる上でリクエストとデータの互換性は⼤事
•  特にデータは並⾏稼動しなくても旧戻しのために⼤事
•  並⾏稼動させるのに考えることいろいろあって⼤変
•  でも仕組みができれば継続的にバージョンアップしていける
•  もうすぐproduction投⼊するので忘れてそうなことあれば教え
て下さい
We’re Hiring
•  クラウドワークスでは個⼈の働き⽅を変えたいRailsエン
ジニアを募集中です
•  https://www.wantedly.com/projects/42054

Contenu connexe

Tendances

Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたいMasato Noguchi
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くMisao X
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてHirata Tomoko
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイルToru Kawamura
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編Kazuya Numata
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるHirata Tomoko
 
僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!Masato Noguchi
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでAsami Abe
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースTakafumi ONAKA
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩Masato Noguchi
 
RubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするRubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするnomlab
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースよしだ あつし
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerTakuro Sasaki
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築Hirata Tomoko
 

Tendances (20)

Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書く
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えて
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイル
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!僕はどうしてもLibsassが使いたかったんだ!
僕はどうしてもLibsassが使いたかったんだ!
 
すこやかRails
すこやかRailsすこやかRails
すこやかRails
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
 
RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩RailsのRailから解放される始めの一歩
RailsのRailから解放される始めの一歩
 
RSpecしぐさ
RSpecしぐさRSpecしぐさ
RSpecしぐさ
 
RubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にするRubyでGitHubをちょっと便利にする
RubyでGitHubをちょっと便利にする
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築WindowsユーザのためのRails環境構築
WindowsユーザのためのRails環境構築
 

En vedette

Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてDesign Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてTakaaki Umada
 
Superpowered Media Server for Android
Superpowered Media Server for AndroidSuperpowered Media Server for Android
Superpowered Media Server for AndroidPatrick Vlaskovits
 
2016年8月のAWSサービスアップデートまとめ
 2016年8月のAWSサービスアップデートまとめ 2016年8月のAWSサービスアップデートまとめ
2016年8月のAWSサービスアップデートまとめAmazon Web Services Japan
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話Makoto Haruyama
 
Personal Kanban 101
Personal Kanban 101Personal Kanban 101
Personal Kanban 101Jim Benson
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Takaaki Umada
 
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile applicationInformation sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile applicationichiko_revjune
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumiItsuki Kuroda
 
Apiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたApiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたHiroshi Hayakawa
 

En vedette (10)

Design Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについてDesign Sprint Process / デザインスプリントの実際のプロセスについて
Design Sprint Process / デザインスプリントの実際のプロセスについて
 
Superpowered Media Server for Android
Superpowered Media Server for AndroidSuperpowered Media Server for Android
Superpowered Media Server for Android
 
2016年8月のAWSサービスアップデートまとめ
 2016年8月のAWSサービスアップデートまとめ 2016年8月のAWSサービスアップデートまとめ
2016年8月のAWSサービスアップデートまとめ
 
マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話マイクロサービスっぽい感じの話
マイクロサービスっぽい感じの話
 
Personal Kanban 101
Personal Kanban 101Personal Kanban 101
Personal Kanban 101
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要
 
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile applicationInformation sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
 
Apiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたApiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれた
 

Similaire à Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話

Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424guest17bfe2
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424龍一 田中
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みSansan
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料慎平 仁藤
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場Yasuko Ohba
 
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会sakaik
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャota42y
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsKoichiro Ohba
 
Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話Akira Miki
 
Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発kan-notice
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Koichi ITO
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Developmentaktsk
 
Rails6にいつ上げるか?
Rails6にいつ上げるか?Rails6にいつ上げるか?
Rails6にいつ上げるか?sinsoku listy
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作Yuki Yazaki
 
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話ota42y
 

Similaire à Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話 (20)

Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組み
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
 
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
 
Railsの今昔
Railsの今昔Railsの今昔
Railsの今昔
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
WebsitesプチDeepDive
WebsitesプチDeepDiveWebsitesプチDeepDive
WebsitesプチDeepDive
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話Dockerizeして
大変だった話、幸せになった話
Dockerizeして
大変だった話、幸せになった話
 
Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発
 
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Development
 
Rails6にいつ上げるか?
Rails6にいつ上げるか?Rails6にいつ上げるか?
Rails6にいつ上げるか?
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作
 
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
 

Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話