Railsじゃなくてもマイグレーションを使えるStandaloneMigration
Rails等のフレームワークを使っていないプロジェクトでマイグレーションを使いたい時にはStandaloneMigrationが使える。(Ruby以外のプロジェクトでも使える。動かすにはもちろん要Rubyだけど)
これを使わなくてもActiveRecordを使って自前でいろいろ書けばできるが、そういういろいろの面倒を見てくれるので楽ができる。
インストール
gem install standalone-migrations
又はbundlerを使ってもいい。
というか環境を移すことを考えるとbundlerを使ったほうがいいですよね。
Rakefileの修正
以下のコードを追記。
begin require 'tasks/standalone_migrations' rescue LoadError => e puts "gem install standalone_migrations to get db:migrate:* tasks! (Error: #{e})" end
db/config.ymlの作成
Railsと同様に例えば以下のように。
development: adapter: sqlite3 database: db/development.sqlite3 production: adapter: sqlite3 database: db/production.sqlite3 test: &test adapter: sqlite3 database: db/test.sqlite3
ここまでやって
rake -T
するといろいろタスクが使えるようになっている。
rake db:create # Create the database from config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config) rake db:drop # Drops the database for the current Rails.env (use db:drop:all to drop all databases) rake db:fixtures:load # Load fixtures into the current environment's database. rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false). rake db:migrate:status # Display status of migrations rake db:new_migration # Create a new migration rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n). rake db:schema:dump # Create a db/schema.rb file that can be portably used against any DB supported by AR rake db:schema:load # Load a schema.rb file into the database rake db:seed # Load the seed data from db/seeds.rb rake db:setup # Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first) rake db:structure:dump # Dump the database structure to an SQL file rake db:version # Retrieves the current schema version number
これらは内部的には’active_record/railties/databases.rake’を使っているので、Railsのマイグレーションと同様に動作する。
rake db:new_migration
以下のようにマイグレーションファイルを作成するRakeタスクが追加されている。
rake db:new_migration name=CreateHoge
nameでマイグレーションの名前を指定する。
これでdb/migrate以下にマイグレーションファイルができるので、Railsを使うときと同様に書いていけばよい。