2008年 02月 04日

単体で (Rails をつかわずに) AR::Migration をつかうメモ

(ほぼ)最小構成の例: (acts_as_versioned もふくめて)

# Rakefile

require "rubygems"
require "rake"
require "active_record"

namespace :db do
	"Migrate database."
	task :migrate do
		require "db/connection"
		ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
	end
end
# db/connection.rb

require "logger"

ActiveRecord::Base.establish_connection({
	:adapter => "sqlite3",
	:dbfile  => "wiki.db",
})

ActiveRecord::Base.logger = Logger.new($stderr)

Dir.glob("model/*.rb") do |f|
	require f
end
# db/migrate/001_init.rb

class Init < ActiveRecord::Migration
	def self.up
		create_table :pages do |t|
			t.column :version    , :int
			t.column :title      , :text
			t.column :body       , :text
			t.column :created_at , :datetime
			t.column :updated_at , :datetime
		end
		Page.create_versioned_table
	end

	def self.down
		Page.drop_versioned_table
		drop_table :pages
	end
end
# model/page.rb

require "acts_as_versioned"

class Page < ActiveRecord::Base
	acts_as_versioned
end
  • AR::Migrator は undocumented なので変更される危険性がそれなりにあるかも ( # :nodoc: 指定)
  • AR::Base.logger を設定しないと Migrator うごかないよ

Rack + SQLite な Wiki をつくろうとおもったけどなんかめんどくさくなってしまった……