2

私が抱えている状況は、SQL Server に schema:dump と移行を実行できるようにする必要がある複数のスキーマがあるということです。1 つのスキーマは新しい Rails アプリケーション用で、もう 1 つのスキーマは依存関係のあるレガシー システム用です。

rake db:schema:dump を実行すると、新しいスキーマ テーブルが schema.rb ファイルに正しく作成されます。従来のスキーマ テーブルは、schema.rb にはなりません。他の人がこの問題にどのように対処しているのか気になります。

私がこれに与えたもう1つの考慮事項は、レガシースキーマテーブルはかなり静的であるため、これらを別のファイルに一度追加してから、schema.rbの前にそのファイルを実行するrake db:schema:loadのbeforeフックを作成することです。 . rake db:schema:load; の前フックはありますか? もしそうなら、それは何ですか?

4

2 に答える 2

1

これが私がこの問題を解決した方法です。

以下で説明するように、hooks.rake 内のスキーマ ロードとスキーマ ダンプに before フックを追加しました。

namespace :project do
  namespace :db do
    task :before_schema_load => :environment do
      add_tables
    end

    task :before_schema_dump => :environment do
      add_ignored_tables
    end
  end
end

Rake::Task['db:schema:dump'].enhance(['project:db:before_schema_dump'])
Rake::Task['db:schema:load'].enhance(['project:db:before_schema_load'])

add_tables 機能内で、レガシー テーブルの静的 schema.rb に相当するものを手動で作成しました。これは、これらが頻繁に変更されないためです (おそらくまったく変更されない可能性があります)。

add_ignored_tables 内で ActiveRecord::SchemaDumper.ignore_tables 配列にテーブルを追加して、自分のスキーマの外部にあり、schema.rb にダンプしたくないテーブルを示します。私の場合、これは現在のアプリのスキーマにないものすべてです。私の状況では、アプリのスキーマの外側に必要なものはすべて add_tables 内で指定されているため、これらのテーブルも schema.rb に含まれてはなりません。

于 2013-01-22T14:34:25.247 に答える
0

Postgresを使用したマルチテナントデータベースに関する資料がいくつかあります。以前に参照したものはhttp://blog.jerodsanto.net/2011/07/building-multi-tenant-rails-apps-with-postgresql-schemas/です。 。宝石(https://github.com/influitive/apartment)もあります。これは、インスピレーションや解決策にもなります。

于 2013-01-17T19:41:41.193 に答える