2

既存の本番データベースのスキーマを反映するテストおよび開発データベースを作成しています。まず、本番スキーマをダンプして db/schema.rb を作成します。

RAILS_ENV=production rake db:schema:dump

これにより、各システム テーブルに空のテーブルを持つ schema.rb が作成されます。

ActiveRecord::Schema.define(version: 0) do

  create_table "MSreplication_objects", id: false, force: :cascade do |t|
  end

  ...    

テスト データベースと開発データベースを作成しようとすると、これらの空のテーブルが原因でエラーが発生します。

$ rake db:reset
-- create_table("MSreplication_objects", {:id=>false, :force=>:cascade})
rake aborted!
ActiveRecord::StatementInvalid: TinyTds::Error: Incorrect syntax near ')'.: CREATE TABLE [MSreplication_objects] ()

schema.rb でシステム テーブルの定義を削除すると、データベースは正常に作成されます。

$ rake db:reset
-- create_table("Org", {:primary_key=>"org_id", :force=>:cascade})
   -> 0.0434s
   -> -1 rows
...

rake db:schema:dump作成できない空のシステム テーブルの定義をダンプしないようにするにはどうすればよいですか?


バージョン:

  • Microsoft SQL Server 2014 - 12.0.2000.8 (x64)
  • レール (4.2.1)
  • activerecord-sqlserver-adapter (4.2.4)
  • github の tiny_tds:
    • git://github.com/rails-sqlserver/tiny_tds.git
    • コミット c4e59ba82c0cc55a5587cec1b7d5100d1b1ccaf4
4

1 に答える 1

1

希望がある:

面倒な作業のほとんどを行うActiveRecord::SchemaDumperは、テーブルを無視するためのシングルトン メソッドを提供します。

ActiveRecord::SchemaDumper.ignore_tables = ['MSreplication_objects', 'MSAnotherStupidSystemTable']

activerecord-sqlserver-adapterこれが行われるべきであるスキーマをダンプするための独自のrakeタスクを提供していないようです(そうすべきです)。

于 2015-05-17T16:24:49.097 に答える