`rake db:架构:dump`使用空系统表创建架构



我正在创建镜像现有生产数据库的模式的测试和开发数据库。首先,我通过倾倒生产模式来创建DB/Schema.rb:

RAILS_ENV=production rake db:schema:dump

这将创建一个为每个系统表的空表:

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)
  • Rails(4.2.1)
  • Activerecord-Sqlserver-Adapter(4.2.4)
  • github的tiny_tds:
    • git://github.com/rails-sqlserver/tiny_tds.git
    • 提交C4E59BA82C0CC55A55587CEC1B7D5100D1B1CCAF4

有希望:

Activerecord :: Schemadumper,它可以使大多数繁重的举重提供忽略桌子的单例方法:

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

activerecord-sqlserver-adapter似乎没有提供自己的耙式任务以倾倒该架构(应该在此任务)。

最新更新