2015-05-17 1 views
2

Я создаю базы данных испытаний и разработки, которые отражают схему существующей производственной базы данных. Во-первых, я создаю дб/schema.rb сбросами производственной схемы:`rake db: schema: dump` создает схему с пустыми системными таблицами

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-адаптер (4.2.4)
  • tiny_tds от github:
    • git: //github.com/rails-sqlserver/tiny_tds.git
    • Commit c4e59ba82c0cc55a5587cec1b7d5100d1b1ccaf4
+0

Получите реальную базу данных :)? Это звучит как проблема с адаптером/БД. – max

+0

Также его 'rake db: schema: dump' – max

+0

@papirtiger Спасибо за исправление. Это то, что происходит, когда я печатаю из памяти вместо вырезания и вставки. И да, я бы хотел, чтобы у меня была другая база данных. –

ответ

1

Существует надежда:

ActiveRecord::SchemaDumper, который делает большую часть тяжелого подъема поставляет одноплодный метод игнорирования таблиц:

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

activerecord-sqlserver-adapter не кажется, поставьте свою собственную рейк-задачу для сброса схемы (которой она должна), где это должно было быть сделано.

+0

Возможно, вы захотите проверить [databases.rake] (https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L48), если вы решили сделать свой собственный грабли. – max

+1

ignore_tables принимает регулярное выражение, поэтому 'ActiveRecord :: SchemaDumper.ignore_tables = [/^MS /]' отлично работает. Благодаря! –