Sequelのマイグレーション機能を使う
マイグレーションを使うと新規テーブルを作ったり、作らなかったことにできます。
今いるディレクトリにRakefileとdbファイル、dbフォルダを置いてdb\migrateフォルダの中にmigrationファイルを入れるような感じで。
├─Rakefile ├─**.db (sqlite) ├─db │ ├─migrate
Migratefile
[table名]は変えてこんな感じに書く。
Sequel.migration do change do create_table(:[table名] do # いろいろcolの設定 # primary_key :id # datetime :created_at, default: Time.now end end end
ファイルは001_create_[table名]みたいな何してるのか分かる名前に。
マイグレーションは1番目から順番に実行されていくから必ず1から始める。
002,003,004...という感じで次に作ったファイルには名前を付けていく。
Rakefile
Rakefileでマイグレーションを実行できるように。
[**.db]の部分は変えて、こんな感じのRakefileという名前のファイルを今のディレクトリに作る。
# coding: utf-8 namespace :db do require "sequel" Sequel.extension :migration DB = Sequel.connect('sqlite://[**.db]') # ここにいろいろ書いていく。 end
まずマイグレーションを実行する所を。
desc 'migrationファイルを実行' task :migrate do Sequel::Migrator.apply(DB, 'db/migrate') # または Sequel::Migrator.run(DB, 'db/migrate') end
これでrake db:migrate
とすると、migrate内のすべてのmigrationファイルが実行される。
もし実行したいファイルを指定したい時は:target
や:current
を使う。
Sequel::Migrator.run(DB, 'db/migrate', target: 2) # 002まで実行 Sequel::Migrator.run(DB, 'db/migrate', target: 4, current: 2) # 003と004だけ実行
そしたらしばらく戻し方がわからなくなった。
すべてのマイグレーションを無かったことに(ロールバックする)したいのなら:target
に0を渡す。
desc 'ロールバック' task :rollback do Sequel::Migrator.run(DB, 'db/migrate', target: 0) end
005ぐらいまで実行していて002ぐらいに戻したい時は`:target'を2にしたりするだけでマル。
自分がどこまで実行しているかは、マイグレーションを実行したときにdbファイルにschema_infoというテーブルができているのでselect * from schema_info;
な感じで確認できる。
ちなみに「全ファイル実行済か」みたいなのは.is_current?
か.check_current
で確認できるとか。
前者はtrue,falseが帰ってきて、後者はエラーmigrator is not current
が帰ってくるみたい。
よくわからん(˘ω˘)