`rake db:schema:dump`创建带有空系统表的模式

时间:2015-05-17 12:55:23

标签: ruby-on-rails sql-server activerecord tiny-tds

我正在创建镜像现有生产数据库模式的测试和开发数据库。首先,我通过转储生产模式来创建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)
  • rails(4.2.1)
  • activerecord-sqlserver-adapter(4.2.4)
  • 来自github的
  • tiny_tds:
    • GIT中://github.com/rails-sqlserver/tiny_tds.git
    • 提交c4e59ba82c0cc55a5587cec1b7d5100d1b1ccaf4

1 个答案:

答案 0 :(得分:1)

有希望:

ActiveRecord::SchemaDumper执行大部分繁重的工作,提供了一种忽略表格​​的单例方法:

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

activerecord-sqlserver-adapter似乎没有提供自己的rake任务来转储模式(应该这样做)。