3

レガシーOracleデータベーススキーマをインポートするために使用される特定のDSL実装を知っている人はいますか? 新しい ruby​​ アプリに移植したい既存のデータベースで db:schema:dump を実行しようとしました。ただし、レーキはエラーなしで途中で終了します。それはちょっとロックアップします。私はこれに取り組むための最良の方法を探し始め、SQLServer ではいくつかのものをオーバーライドする方法の例を見つけましたが、Oracle ではあまりありませんでした。

私は基本的に、スキーマを取り込み、そこから足場とモデルを生成したいと考えています。

これを行うためのより簡単な方法はありますか、それとも車輪を発明する必要がありますか?

4

3 に答える 3

9

最初の質問 - 元の ActiveRecord Oracle アダプターまたは oracle_enhanced アダプター ( http://github.com/rsim/oracle-enhanced ) を使用していますか? スキーマ ダンプのパフォーマンスを改善したので、oracle_enhanced アダプターを使用することをお勧めします。

Rails では、スキーマ ダンプの 2 つの方法を提供しています。

rake db:schema:dump

これにより、スキーマ作成用の Rails 移行を含む schema.rb ファイルが作成されます。Oracle の場合、ユーザーのローカル スキーマ (ユーザーは database.yml で指定) 内のすべてのテーブルを検索し、Oracle のデータ型を Rails モデルの属性型に変換しようとします。Rails でサポートされていないデータ型がある場合、それらが失われる可能性があります。ただし、Rails の方法でアプリケーションを再設計する場合は、これが推奨される方法です。前述したように、大規模な Oracle データ ディクショナリの場合 (すべてのスキーマに数千のテーブルがある場合) に、スキーマ ダンプ用の oracle_enhanced アダプターのパフォーマンスを改善しました。

rake db:structure:dump

これにより、他の Oracle データベースで実行できる SQL スキーマ ファイル (例: db/development_structure.sql) が作成されます (これは他のデータベースでは機能しません)。これは、スキーマ ダンプを作成するより高速な方法であり、Oracle 固有のデータ型が失われることはありません。しかし、この方法では、後でこのデータベースで ActiveRecord を使用するときに問題が発生し、一部のデータ型が正しく処理されないことに気付くことがあります。したがって、生の SQL ではなく、Rails 移行を使用してスキーマを維持することをお勧めします。

ただし、既存の Oracle データベースで Rails を使用する場合は、このスキーマを再作成する必要はありません。database.yml をこの既存のデータベース スキーマにポイントするだけで、既存のテーブルの上に ActiveRecord モデルの作成を開始できます。レガシー Oracle データベースで Rails を使用する方法のヒントについては、http://blog.rayapps.com/2008/09/26/openworld-unconference-presentation-about-rails-on-oracle/を参照してください。

于 2008-10-31T08:20:07.160 に答える
1

更新:これは、「, :require => false」を使用した場合にのみ失敗します。このパラメーターを削除すると、期待どおりに機能します。

これは本当にうまくいくはずですか?

~/Projects/test (master) $ rake db:structure:dump
(in /Users/plentz/Projects/test)
rake aborted!
Task not supported by 'oracle_enhanced'

(See full trace by running task with --trace)

Gemfile

gem 'activerecord-oracle_enhanced-adapter', :require => false

Using activerecord-oracle_enhanced-adapter (1.3.2) 
于 2011-02-15T13:03:31.807 に答える