SlideShare a Scribd company logo
1 of 64
Download to read offline


$ rails generate migration CreateUsers
$ ls db/migrate/
20131104023129_create_users.rb
## file: db/migrate/20131104023129_create_users.rb
class CreateUsers < ActiveRecord::Migration
def up
create_table "users" do |t|
t.string "name"
t.string "email"
end
end
def down
drop_table "users"
end
end
## バージョンを上げる
$ rake db:migrate
## バージョンを戻す
$ rake db:rollback
## 再実行(戻して、もう一度上げる)
$ rake db:migrate:redo
## 現在のバージョンを調べる
$ rake db:version
Current version:20131104023129
postgres=> dt users;
List of relations
Schema ¦ Name ¦ Type ¦ Owner
--------+-------+-------+--------
public ¦ users ¦ table ¦ myname
(1 row)
postgres=> select * from schema_migrations;
version
----------------
20131104023129
(1 row)










### Install
$ curl -Lo migr8.rb http://bit.ly/migr8_rb
$ chmod a+x ./migr8.rb
### Setup (PostgreSQL, MySQL, SQLite)
$ export MIGR8_COMMAND="psql -qX -U user1 dbname"
$ #export MIGR8_COMMAND="mysql -s -u user1 dbname"
$ #export MIGR8_COMMAND="sqlite3 dbfile"
### Setup (Editor)
$ export MIGR8_EDITOR="emacsclient -n"
$ #export MIGR8_EDITOR="vim"
$ #export MIGR8_EDITOR="open -a CotEditor"
### ヘルプを表示
$ ./migr8.rb help
### 初期化
$ ./migr8.rb init
### ディレクトリが作られる
$ ls -F migr8/
history.txt # ← バージョン番号の一覧
migrations/ # ← マイグレーションファイル置き場
$ ./migr8.rb new -m "create 'users' table"
# or: ./migr8.rb new --table=users
$ ls migr8/migrations
scjs8350.yaml
# -*- coding: utf-8 -*-
version: scjs8350
desc: create 'users' table
author: alice
vars:
up: ¦
create table users (
id serial primary key
name varchar(255) not null unique,
);
down: ¦
drop table users;
# -*- coding: utf-8 -*-
version: scjs8350
desc: create 'users' table
author: alice
vars:
- table: users
up: ¦
create table ${table} (
id serial primary key
name varchar(255) not null unique,
);
down: ¦
drop table ${table};
### バージョンを上げる
$ ./migr8.rb up
### バージョンを戻す
$ ./migr8.rb down
### 再実行(戻して、もう一度上げる)
$ ./migr8.rb redo
### 現在のバージョンを調べる

$ ./migr8.rb status # 省略可
...(snip)...
postgres=> dt users;
List of relations
Schema ¦ Name ¦ Type ¦ Owner
--------+-------+-------+-------
public ¦ users ¦ table ¦ user1
(1 row)
postgres=> select id, version from _migr8_history;
id | version
---------------
1 | scjs8350
(1 row)


### インデックスを追加
$ ./migr8.rb new --index=users.name
$ ./migr8.rb up
### テーブルを追加
$ ./migr8.rb new --table=groups
$ ./migr8.rb up
### カラムを追加
$ ./migr8.rb new --column=users.group_id
$ ./migr8.rb hist
scjs8350 2013-11-07 23:01:13 # [john] create 'users'
ewwg6691 2013-11-07 23:29:33 # [john] add index
gnqc9473 2013-11-07 23:44:29 # [john] create 'groups'
spvo5800 (not applied) # [john] add 'group_id'


$ cat migr8/history.txt
# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users' table
ewwg6691 # [john] add index to 'users.name'
gnqc9473 # [john] create 'groups' table
spvo5800 # [john] add 'group_id' column


# -*- coding: utf-8 -*-
version: ewwg6691
desc: add index to 'users.name'
author: john
vars:
- table: users
- column: name
- index: ${users}_${column}_idx
up: ¦
create index ${index} on ${table}(${column});
down: ¦
drop index ${index};
# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users' table
ewwg6691 # [john] add index to 'users.name'
gnqc9473 # [john] create 'groups' table
spvo5800 # [john] add 'group_id' column
create table _migr8_history (
id serial primary key
, version varchar(40) not null unique
, author varchar(40) not null
, description varchar(255) not null
, up_script text not null
, down_script text not null
, applied_at timestamp not null default timeofday()
);


begin;
create table ...;
insert into _migr8_history ...;
create index ...;
insert into _migr8_history ...;
alter table ...;
insert into _migr8_history ...;
commit;
$ psql -qX -U user1 dbname < migr8/tmp.sql
$ rm migr8/tmp.sql
psql=> select * from _migr8_history;
....
-[ RECORD 23 ]---------------------------------------
id | 101
version | aaaa1111
up_script | create table ...(snip)...
down_script | drop table ...(snip)...
applied_at | 2014-01-01 12:34:56
-[ RECORD 24 ]---------------------------------------
id | 102
version | bbbb2222
up_script | create index ...(snip)...
down_script | index table ...(snip)...
applied_at | 2014-01-01 12:34:56
-[ RECORD 25 ]---------------------------------------
....
up: |
commit;
alter type ... add value;
begin;










# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users'
ewwg6691 # [john] add index
gnqc9473 # [alice] create 'groups'
spvo5800 # [alice] add 'group_id'
xmss3947 # [john] insert seed data








# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users'
ewwg6691 # [john] add index
<<<<<<< HEAD
gnqc9473 # [alice] create 'groups'
spvo5800 # [alice] add 'group_id'
=======
xmss3947 # [john] insert seed data
>>>>>>> topicbranch




$ ./migr8.rb hist
scjs8350 2013-11-07 12:01:13 # [john] create 'users'
gnqc9473 (not applied) # [alice] create 'groups'
spvo5800 (not applied) # [alice] add 'group_id'
ewwg6691 2013-11-08 20:29:33 # [john] add index
$ ./migr8r.rb apply gnqc9473 spv05800




















$ ./migr8.rb status
## Status: all applied
## Recent history:
scjs8350 2013-11-07 12:01:13 # [john] create 'users'
gnqc9473 2013-11-07 13:54:20 # [alice] create 'groups'
## !!! The following migrations are applied to DB,
## !!! but files are not found.
## !!! (Try `migr8.rb unapply -x abcd1234` to unapply them.)
ewwg6691 2013-11-08 20:29:33 # [john] add index
$ ./migr8r.rb unapply -x ewwg6691









 







$ ./migr8.rb readme ## readmeを表示
$ ./migr8.rb help ## ヘルプ
$ ./migr8.rb init ## 初期化
$ ./migr8.rb new -h ## ヘルプ
$ ./migr8.rb new -m "create table" ## 汎用
$ ./migr8.rb new --table=users ## テーブルを作成
$ ./migr8.rb new --column=users.name ## カラムを追加
$ ./migr8.rb new --index=users.name ## 索引を追加
$ ./migr8.rb new --unique=users.name ## 一意制約を追加
$ ./migr8.rb up -h ## ヘルプ
$ ./migr8.rb up ## 1つだけ適用 (※1)
$ ./migr8.rb up -n 3 ## 3つ適用 (※2)
$ ./migr8.rb up -a ## 全部適用 (※3)
(※1) 未適用のうち最も古いのを1つ適用
(※2) 未適用のうち古い順に3つ適用
(※3) 未適用のものを古い順に全部適用
$ ./migr8.rb down -h ## ヘルプ
$ ./migr8.rb down ## 1つだけ戻す (※1)
$ ./migr8.rb down -n 3 ## 3つ戻す (※2)
$ ./migr8.rb down --ALL ## 全部戻す (※3)
(※1) 適用済みのうち最も新しいものを1つ戻す
(※2) 適用済みのうち新しい順に3つ戻す
(※3) 適用済のものを新しい順に全部戻す
$ ./migr8.rb redo -h ## ヘルプ
$ ./migr8.rb redo ## 1つだけ戻し、再度適用する
$ ./migr8.rb redo -n 3 ## 3つ戻し、再度適用する
$ ./migr8.rb redo --ALL ## 全部戻し、再度適用する
$ ./migr8.rb apply -h ## ヘルプ
$ ./migr8.rb apply version ## 指定したのを適用
$ ./migr8.rb apply version1 version2 ... ## 複数指定も可
$ ./migr8.rb unapply -h ## ヘルプ
$ ./migr8.rb unapply version ## 指定したのを適用
$ ./migr8.rb unapply version1 version2 ... ## 複数指定も可
$ ./migr8.rb unapply -x version ## ファイルがない場合(※)
(※) unapply -x は、マイグレーションファイルを使わず、
DB内の履歴テーブルに格納された down 用 SQL を使う。
「適用されているけどファイルがないマイグレーション」を
戻すときはこの方法を使う。
$ ./migr8.rb show -h ## ヘルプ
$ ./migr8.rb show version ## 内容を表示 (変数展開済)
$ ./migr8.rb show ## 直近のバージョンが対象
$ ./migr8.rb show -x version ## DBテーブルから読み込む
$ ./migr8.rb edit -h ## ヘルプ
$ ./migr8.rb edit version ## ファイルをエディタで開く
$ ./migr8.rb edit ## 直近のバージョンが対象
$ ./migr8.rb edit -r N ## N個前のバージョンが対象
$ ./migr8.rb edit -e editor ## エディタを指定 (※1)
(※1) デフォルトは $MIGR8_EDITOR で指定される
$ ./migr8.rb delete -h ## ヘルプ
$ ./migr8.rb delete --Imsure version ## ファイルを削除(※)
$ ./migr8.rb delete version ## (これは動作しない)
(※) マイグレーションが適用済みならファイルは削除できない。
$ ./migr8.rb status -h ## ヘルプ
$ ./migr8.rb status ## 直近の5個を表示
$ ./migr8.rb status -n N ## 直近のN個を表示
##### 実行例:未適用があると教えてくれる
$ ./migr8.rb status
## Status: YOU MUST APPLY spvo5800 AT FIRST!
## Recent history:
scjs8350 2013-11-07 23:01:13 # [john] create 'users'
ewwg6691 2013-11-07 23:29:33 # [john] add index
gnqc9473 2013-11-07 23:44:29 # [alice] create 'groups'
spvo5800 (not applied) # [alice] add 'group_id'
xmss3947 2013-11-08 19:29:33 # [john] insert seed data
$ ./migr8.rb hist -h ## ヘルプ
$ ./migr8.rb hist ## 履歴を表示
$ ./migr8.rb hist -o ## history.txtをエディタで開く
$ ./migr8.rb hist -b ## 順番を保ったまま、

## history.txtを作り直す(※)
(※) マイグレーションファイル内の摘要(description)と、
history.txt 内のコメントとが一致していないときに使う。
Migr8.rb チュートリアル

More Related Content

What's hot

まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングKosuke Kida
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)Shinya Sugiyama
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoTakayuki Shimizukawa
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座Mikiya Okuno
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Masashi Shibata
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 
AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄外道 父
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)NTT DATA Technology & Innovation
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 

What's hot (20)

まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 

Viewers also liked

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望Masaki Nakagawa
 
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...TIS Inc.
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQLSoudai Sone
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたadachij2002
 
Ivsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapIvsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapTadashi Okazaki
 
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜Takeshi Wakamatsu
 
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループAPCommunications-recruit
 
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo NagataInsight Technology, Inc.
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介IBM Analytics Japan
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~Serverworks Co.,Ltd.
 
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...Insight Technology, Inc.
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだことShinnosuke Akita
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫Insight Technology, Inc.
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話Soudai Sone
 
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...Insight Technology, Inc.
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac DawsonCODE BLUE
 

Viewers also liked (20)

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望
 
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみた
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
Ivsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapIvsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recap
 
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
 
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
 
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
 
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話
 
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
 

Similar to Migr8.rb チュートリアル

More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Setxibbar
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabricdoublemarket
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版Masahiro Nagano
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03Takayuki Yamaguchi
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Sea Mountain
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京Yu Ito
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 

Similar to Migr8.rb チュートリアル (20)

More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Set
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabric
 
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 

More from kwatch

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Pythonkwatch
 
なんでもID
なんでもIDなんでもID
なんでもIDkwatch
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方kwatch
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)kwatch
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策kwatch
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurialkwatch
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -kwatch
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみたkwatch
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"kwatch
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラムkwatch
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンkwatch
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapperkwatch
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -kwatch
 

More from kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
なんでもID
なんでもIDなんでもID
なんでもID
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapper
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

Migr8.rb チュートリアル

  • 1.
  • 2.
  • 3.
  • 4.
  • 5. $ rails generate migration CreateUsers $ ls db/migrate/ 20131104023129_create_users.rb
  • 6. ## file: db/migrate/20131104023129_create_users.rb class CreateUsers < ActiveRecord::Migration def up create_table "users" do |t| t.string "name" t.string "email" end end def down drop_table "users" end end
  • 7. ## バージョンを上げる $ rake db:migrate ## バージョンを戻す $ rake db:rollback ## 再実行(戻して、もう一度上げる) $ rake db:migrate:redo ## 現在のバージョンを調べる $ rake db:version Current version:20131104023129
  • 8. postgres=> dt users; List of relations Schema ¦ Name ¦ Type ¦ Owner --------+-------+-------+-------- public ¦ users ¦ table ¦ myname (1 row) postgres=> select * from schema_migrations; version ---------------- 20131104023129 (1 row) 

  • 9.
  • 10.
  • 12. ### Install $ curl -Lo migr8.rb http://bit.ly/migr8_rb $ chmod a+x ./migr8.rb ### Setup (PostgreSQL, MySQL, SQLite) $ export MIGR8_COMMAND="psql -qX -U user1 dbname" $ #export MIGR8_COMMAND="mysql -s -u user1 dbname" $ #export MIGR8_COMMAND="sqlite3 dbfile" ### Setup (Editor) $ export MIGR8_EDITOR="emacsclient -n" $ #export MIGR8_EDITOR="vim" $ #export MIGR8_EDITOR="open -a CotEditor"
  • 13. ### ヘルプを表示 $ ./migr8.rb help ### 初期化 $ ./migr8.rb init ### ディレクトリが作られる $ ls -F migr8/ history.txt # ← バージョン番号の一覧 migrations/ # ← マイグレーションファイル置き場
  • 14. $ ./migr8.rb new -m "create 'users' table" # or: ./migr8.rb new --table=users $ ls migr8/migrations scjs8350.yaml
  • 15. # -*- coding: utf-8 -*- version: scjs8350 desc: create 'users' table author: alice vars: up: ¦ create table users ( id serial primary key name varchar(255) not null unique, ); down: ¦ drop table users;
  • 16. # -*- coding: utf-8 -*- version: scjs8350 desc: create 'users' table author: alice vars: - table: users up: ¦ create table ${table} ( id serial primary key name varchar(255) not null unique, ); down: ¦ drop table ${table};
  • 17. ### バージョンを上げる $ ./migr8.rb up ### バージョンを戻す $ ./migr8.rb down ### 再実行(戻して、もう一度上げる) $ ./migr8.rb redo ### 現在のバージョンを調べる
 $ ./migr8.rb status # 省略可 ...(snip)...
  • 18. postgres=> dt users; List of relations Schema ¦ Name ¦ Type ¦ Owner --------+-------+-------+------- public ¦ users ¦ table ¦ user1 (1 row) postgres=> select id, version from _migr8_history; id | version --------------- 1 | scjs8350 (1 row) 

  • 19. ### インデックスを追加 $ ./migr8.rb new --index=users.name $ ./migr8.rb up ### テーブルを追加 $ ./migr8.rb new --table=groups $ ./migr8.rb up ### カラムを追加 $ ./migr8.rb new --column=users.group_id
  • 20. $ ./migr8.rb hist scjs8350 2013-11-07 23:01:13 # [john] create 'users' ewwg6691 2013-11-07 23:29:33 # [john] add index gnqc9473 2013-11-07 23:44:29 # [john] create 'groups' spvo5800 (not applied) # [john] add 'group_id' 

  • 21. $ cat migr8/history.txt # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' table ewwg6691 # [john] add index to 'users.name' gnqc9473 # [john] create 'groups' table spvo5800 # [john] add 'group_id' column
  • 22.
  • 23.
  • 24. # -*- coding: utf-8 -*- version: ewwg6691 desc: add index to 'users.name' author: john vars: - table: users - column: name - index: ${users}_${column}_idx up: ¦ create index ${index} on ${table}(${column}); down: ¦ drop index ${index};
  • 25. # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' table ewwg6691 # [john] add index to 'users.name' gnqc9473 # [john] create 'groups' table spvo5800 # [john] add 'group_id' column
  • 26. create table _migr8_history ( id serial primary key , version varchar(40) not null unique , author varchar(40) not null , description varchar(255) not null , up_script text not null , down_script text not null , applied_at timestamp not null default timeofday() );
  • 27.
  • 28. begin; create table ...; insert into _migr8_history ...; create index ...; insert into _migr8_history ...; alter table ...; insert into _migr8_history ...; commit;
  • 29. $ psql -qX -U user1 dbname < migr8/tmp.sql $ rm migr8/tmp.sql
  • 30. psql=> select * from _migr8_history; .... -[ RECORD 23 ]--------------------------------------- id | 101 version | aaaa1111 up_script | create table ...(snip)... down_script | drop table ...(snip)... applied_at | 2014-01-01 12:34:56 -[ RECORD 24 ]--------------------------------------- id | 102 version | bbbb2222 up_script | create index ...(snip)... down_script | index table ...(snip)... applied_at | 2014-01-01 12:34:56 -[ RECORD 25 ]--------------------------------------- ....
  • 31. up: | commit; alter type ... add value; begin;
  • 32.
  • 33.
  • 35.
  • 36. 
 
 # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' ewwg6691 # [john] add index gnqc9473 # [alice] create 'groups' spvo5800 # [alice] add 'group_id' xmss3947 # [john] insert seed data
  • 38.
  • 39. 
 # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' ewwg6691 # [john] add index <<<<<<< HEAD gnqc9473 # [alice] create 'groups' spvo5800 # [alice] add 'group_id' ======= xmss3947 # [john] insert seed data >>>>>>> topicbranch
  • 40.
  • 41.
  • 42. 
 
 $ ./migr8.rb hist scjs8350 2013-11-07 12:01:13 # [john] create 'users' gnqc9473 (not applied) # [alice] create 'groups' spvo5800 (not applied) # [alice] add 'group_id' ewwg6691 2013-11-08 20:29:33 # [john] add index $ ./migr8r.rb apply gnqc9473 spv05800
  • 44.
  • 45. 
 
 $ ./migr8.rb status ## Status: all applied ## Recent history: scjs8350 2013-11-07 12:01:13 # [john] create 'users' gnqc9473 2013-11-07 13:54:20 # [alice] create 'groups' ## !!! The following migrations are applied to DB, ## !!! but files are not found. ## !!! (Try `migr8.rb unapply -x abcd1234` to unapply them.) ewwg6691 2013-11-08 20:29:33 # [john] add index $ ./migr8r.rb unapply -x ewwg6691
  • 48.
  • 49.
  • 51.
  • 52. $ ./migr8.rb readme ## readmeを表示 $ ./migr8.rb help ## ヘルプ $ ./migr8.rb init ## 初期化
  • 53. $ ./migr8.rb new -h ## ヘルプ $ ./migr8.rb new -m "create table" ## 汎用 $ ./migr8.rb new --table=users ## テーブルを作成 $ ./migr8.rb new --column=users.name ## カラムを追加 $ ./migr8.rb new --index=users.name ## 索引を追加 $ ./migr8.rb new --unique=users.name ## 一意制約を追加
  • 54. $ ./migr8.rb up -h ## ヘルプ $ ./migr8.rb up ## 1つだけ適用 (※1) $ ./migr8.rb up -n 3 ## 3つ適用 (※2) $ ./migr8.rb up -a ## 全部適用 (※3) (※1) 未適用のうち最も古いのを1つ適用 (※2) 未適用のうち古い順に3つ適用 (※3) 未適用のものを古い順に全部適用
  • 55. $ ./migr8.rb down -h ## ヘルプ $ ./migr8.rb down ## 1つだけ戻す (※1) $ ./migr8.rb down -n 3 ## 3つ戻す (※2) $ ./migr8.rb down --ALL ## 全部戻す (※3) (※1) 適用済みのうち最も新しいものを1つ戻す (※2) 適用済みのうち新しい順に3つ戻す (※3) 適用済のものを新しい順に全部戻す
  • 56. $ ./migr8.rb redo -h ## ヘルプ $ ./migr8.rb redo ## 1つだけ戻し、再度適用する $ ./migr8.rb redo -n 3 ## 3つ戻し、再度適用する $ ./migr8.rb redo --ALL ## 全部戻し、再度適用する
  • 57. $ ./migr8.rb apply -h ## ヘルプ $ ./migr8.rb apply version ## 指定したのを適用 $ ./migr8.rb apply version1 version2 ... ## 複数指定も可
  • 58. $ ./migr8.rb unapply -h ## ヘルプ $ ./migr8.rb unapply version ## 指定したのを適用 $ ./migr8.rb unapply version1 version2 ... ## 複数指定も可 $ ./migr8.rb unapply -x version ## ファイルがない場合(※) (※) unapply -x は、マイグレーションファイルを使わず、 DB内の履歴テーブルに格納された down 用 SQL を使う。 「適用されているけどファイルがないマイグレーション」を 戻すときはこの方法を使う。
  • 59. $ ./migr8.rb show -h ## ヘルプ $ ./migr8.rb show version ## 内容を表示 (変数展開済) $ ./migr8.rb show ## 直近のバージョンが対象 $ ./migr8.rb show -x version ## DBテーブルから読み込む
  • 60. $ ./migr8.rb edit -h ## ヘルプ $ ./migr8.rb edit version ## ファイルをエディタで開く $ ./migr8.rb edit ## 直近のバージョンが対象 $ ./migr8.rb edit -r N ## N個前のバージョンが対象 $ ./migr8.rb edit -e editor ## エディタを指定 (※1) (※1) デフォルトは $MIGR8_EDITOR で指定される
  • 61. $ ./migr8.rb delete -h ## ヘルプ $ ./migr8.rb delete --Imsure version ## ファイルを削除(※) $ ./migr8.rb delete version ## (これは動作しない) (※) マイグレーションが適用済みならファイルは削除できない。
  • 62. $ ./migr8.rb status -h ## ヘルプ $ ./migr8.rb status ## 直近の5個を表示 $ ./migr8.rb status -n N ## 直近のN個を表示 ##### 実行例:未適用があると教えてくれる $ ./migr8.rb status ## Status: YOU MUST APPLY spvo5800 AT FIRST! ## Recent history: scjs8350 2013-11-07 23:01:13 # [john] create 'users' ewwg6691 2013-11-07 23:29:33 # [john] add index gnqc9473 2013-11-07 23:44:29 # [alice] create 'groups' spvo5800 (not applied) # [alice] add 'group_id' xmss3947 2013-11-08 19:29:33 # [john] insert seed data
  • 63. $ ./migr8.rb hist -h ## ヘルプ $ ./migr8.rb hist ## 履歴を表示 $ ./migr8.rb hist -o ## history.txtをエディタで開く $ ./migr8.rb hist -b ## 順番を保ったまま、
 ## history.txtを作り直す(※) (※) マイグレーションファイル内の摘要(description)と、 history.txt 内のコメントとが一致していないときに使う。