RSS RSS
TrinityT's LABO DoRuby出張版
2009.06.03
カテゴリ:データベース - 役立ちツール - ノウハウ

RailsでOracle~ データベース初期化タスクをつくろう!編

TrinityTです。

今回はRails&Oracleに関する第二弾として、DBの初期化を行う独自タスクについて説明します。

普段の開発では、ダミーデータの削除やユニットテスト前の初期化など、テーブル構成を初期化したい場合にdb:migrate:resetタスクを活用して行っています。

しかし、OracleはMySQLやPostgresqlとテーブル管理の単位、ユーザなどの概念が異なるため、データベースの削除を行おうとするdb:migrate:resetタスクはエラーとなってしまいます。

本問題を解決するためのOracle用独自タスクを作ってみました。

以下の内容でファイルを${RAILS_ROOT}/lib/tasks に作成してください。

db_ora.rake

namespace :db_ora do namespace :migrate do desc "Reset Database (For Oracle)" task "reset" => ["truncate", "db:migrate"] desc "truncate all objects (For Oracle)" task "truncate" do # テーブル削除 user_tables = UserTable.find(:all) user_tables.each do |table| ActiveRecord::Base.connection.execute("DROP TABLE #{table.table_name}") end # ビュー削除 user_views = UserView.find(:all) user_views.each do |view| ActiveRecord::Base.connection.execute("DROP View #{view.view_name}") end # シーケンス削除 user_sequences = UserSequence.find(:all) user_sequences.each do |sequence| ActiveRecord::Base.connection.execute("DROP SEQUENCE #{sequence.sequence_name}") end end # ユーザが持つテーブル一覧取得用Model class UserTable < ActiveRecord::Base end # ユーザが持つシーケンス一覧取得用Model class UserSequence < ActiveRecord::Base end # ユーザが持つビュー一覧取得用Model class UserView < ActiveRecord::Base end end end end

コレで以下のコマンドをRAILS_ROOTで行うと、DB初期化とmigrationが行われます。

$ rake db_ora:migrate:reset


db_ora:migrate:resetタスクは作成した独自タスク(truncate)と、db:migrateタスクを組み合わせて行っています。

本タスクの流れは以下の通りです。

(1)truncateタスクを実行

(2)Oracleのシステムテーブル「user_tables」に格納されているテーブル名一覧を取得

(3)テーブルに対してDROP文を実行

(4)同様の処理をシーケンス、ビューに対して実行

(5)db:migrateタスクを実行し、dbの再構築を行う


このタスクを使うことでOracleでもdb:migrate:resetコマンドを擬似的に実行することが可能となります。

こんな感じで独自のオレオレrakeタスクを作ることは簡単なので、皆さんも是非作ってみてはいかがでしょうか!

ブックマークに追加する

.
web開発ならKBMJ
Rubyでのwebシステム開発は
実績豊富なKBMJにお任せ下さい
iPhone開発
iPhone開発は
KBMJにお任せ下さい
ブラウザゲーム エインヘリアル
ブラウザゲーム「エインへリアル」
αテスター募集中
オープンソースECパッケージ エレコマ
オープンソースECパッケージ
「エレコマ」

プロフィール

TrinityT
TrinityT
TrinityTです。

0x17歳で就職し、組み込み(ICカード)→MFC→大規模金融バッチ系(C++,STF)→金融系Web(JSF+Spring)と来て、2007年に株式会社KBMJに転職。
主にRubyOnRailsとSeaser2でWebアプリ開発に従事。
得意技はCapistrano。
最近はAndroidアプリにも手を出し始めました。

個人ブログ:TrinityT's LABO

最近チェックした記事

最新記事

アーカイブ

アクセスランキング

KBMJのWebソリューション
Ruby on railsの開発ならKBMJ
株式会社ケイビーエムジェイ