2009-06-04 7 views
13

私は最近、マイグレーションによっていくつかのSQL関数をデータベースに追加しました。コードは動作し、データベースは動作しません。テストでは動作しません。 schema.rbファイルは、最新のバージョンであることを伝えていますが、それは正しいですが、追加した関数ではなく、テーブルとインデックスの定義のみが含まれています。Railsのrake db:migrateがスキーマファイルに関数を追加しないのはなぜですか?

私は、移行中に「実行()」メソッドを介して機能を追加し、RSpecのテストに合格するために(会社の方針は、私はこれが修正されるまで、これは変更コミットできないことを指示する)テスト・データベースにそれらを必要とします。

これがなぜ起こっているのか、それを修正する方法は誰にも分かりますか?私は手動でMySQLのコマンドラインに入り、関数を追加することができますが、次にdb:test:prepareを実行したときにそれらは消去されます。私は自動化できる解決策が必要です。任意のヘルプと返信用

おかげで、

-Mike Trpcic

答えて

12

schema.rbは、Rubyスキーマ形式であり、それは関数や他の多くの、より高度な機能をサポートしていません。形式をplain SQL(environment.rb)に変更してください。

config.active_record.schema_format = :sql 

編集:マイクのコメントの後、私は、掘削のビットをしました。スキーマコールをMySQLとOracleのActiveRecord接続アダプタにダンプするためのRakeタスク。 MySQLはそれほどスマートではなく、他のすべてを無視してテーブル構造だけをダンプします。 PostgreSQL、SQLite、SQL Server、およびFirebirdはベンダー提供の実行可能ファイルを呼び出します。

mysqldumpdoesn't support dumping stored proceduresバージョン5.0.13より前。

私はRails Lighthouseの周りを見回しましたが、開かれたチケットを探すのは、はるかに難しいです。他に誰もこのバグを提出していない場合は、そうすることを検討するかもしれませんが、パッチがなくても誰もそれに取り組むつもりはありません。

+1

スティーブ、あなたは私ができなかったすべての情報を見つけました。おかげさしで、最終的に答えが得られました。 –

+0

私は:ruby形式の方が好きです。私は、データベースがschema.rbからロードされるたびに自動的に実行される特定の移行を指定する方法があることを望みます。 –

関連する問題