Rubricksコンポーネントのスキーマ更新
Posted 12月 4th, 2006 by hippos
rublogコンポーネントのバージョンアップの開発もそろそろ区切りを付けようと思っているのですが、スキーマのアップデートの方法でしばらくの間悩んでいました。なにしろ行き当たりばったりの開発なのでスキーマの変更がたくさんあって、この変更をどう処理したものかうまい方法が見つからず思案していたわけなんです。Railsのスキーマ管理のやり方としてはActiveRecord::Migrationを使用するのが素直なことはわかっていたのですがこれだとアプリケーション全体のバージョンに影響が出てしまいます。かといって別途SQLを用意してユーザにコマンドを打たせるのも今ひとつスマートじゃない気がして。
そこで、思い当たったのがRubricks本体のコンポーネントのインストール。この時もMigrationを使用しているはずなので同様の問題が発生しているはずなのですがこれをどんな風に回避しているのか?コードを見てみました。そしたらなんと、いったんschema_infoのバージョンを0にしてmigrate、そしてその後元に戻すというシンプルなやり方をしていました。実はこのテ、最初に考えた事は考えたのですがちょっと反則気味な気がして二の足を踏んでいたのですが、Rubricks本体がこうしているならお墨つきってことでこの方法を採用することにしました。
後は、InstallationScriptのafter_updateにMigratorを仕込んで、
def after_update
rsi = RubricksSchemaInfo.find_all.first
system_current_schema_version = rsi.version
begin
rsi.version = 0
rsi.save
ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/components/rublog/...")
rescue Exception
$stderr.puts $!.message
exit 1
ensure
rsi.version = system_current_schema_version
rsi.save
end
end
|
でアップデートしてみたらちゃんとスキーマ更新できました。ホッ。近日中にアップデートできそうです。(誰もつかっていないのでホントはこんな処理不要なんですけど....)
この記事のトラックバックURL:
http://hippos-lab.com/blog/trackback/76


最近のコメント
14 weeks 4 days ago
49 weeks 2 days ago
1年 14 weeks ago
1年 14 weeks ago
1年 31 weeks ago
1年 31 weeks ago
1年 31 weeks ago
1年 43 weeks ago
1年 43 weeks ago
2 years 23 weeks ago