13

最近、移行を介してデータベースにいくつかのSQL関数を追加しましたが、それらは完全に正常に機能します。コードは機能しますが、データベースは機能しますが、テストは機能しません。schema.rbファイルは、最新バージョンである(そして正しい)ことを示していますが、追加した関数ではなく、テーブルとインデックスの定義のみが含まれています。

移行で「execute()」メソッドを介して関数を追加し、RSpecテストに合格するには、テストデータベースに関数を追加する必要があります(会社のポリシーでは、これが修正されるまでこの変更をコミットできないと規定されています)。

なぜこれが起こっているのか、またはそれを修正する方法を誰かが知っていますか?手動でMySQLコマンドラインに移動して関数を追加できますが、次に誰かがdb:test:prepareを実行したときに関数が消去されます。自動化できるソリューションが必要です。

ヘルプと返信をありがとう、

-マイクTrpcic

4

1 に答える 1

12

schema.rbは Ruby スキーマ形式であり、関数やその他の多くの高度な機能をサポートしていません。形式をプレーン SQL ( environment.rb) に変更すると、準備完了です。

config.active_record.schema_format = :sql

編集:マイクのコメントの後、少し掘り下げました。スキーマ呼び出しを MySQL および Oracle 用の ActiveRecord 接続アダプターにダンプする Rake タスク。MySQL はあまりスマートではなく、テーブル構造のみをダンプし、他のすべてを無視します。PostgreSQL、SQLite、SQL Server、および Firebird は、ベンダー提供の実行可能ファイルを呼び出します。

mysqldump バージョン 5.0.13 より前のストアド プロシージャのダンプはサポートされていません。

Rails Lighthouse を見回しましたが、オープン チケットを探すのは思ったよりも困難でした。他の誰もこれに関するバグを報告していない場合は、そうすることを検討するかもしれませんが、パッチがなければ、誰もそれに取り組むことはありません.

于 2009-06-04T20:00:56.957 に答える