11

Существует проблема, из-за которой мои миграции рельсов обновляют схему с помощью пробелов и положение столбцов таблицы.Перемещение Rails всегда вставляет пробелы или меняет порядок столбцов в схеме

Так что в большинстве случаев, когда я запускаю bundle exec rake db:migrate, он выполнит один из следующих сценариев. Когда я объединяю это в нашу основную ветку, и другие разработчики отключают это, тогда их рельсовая миграция возвращает вкладки и порядок позиций.

Мы заметили, что все три разработчика в команде имеют такую ​​же проблему при выполнении миграции, если я был последним коммиттером схемы.

Я только что обновил postgres to v9.2.4, что аналогично другим разработчикам. Какие-нибудь идеи о том, что еще я мог попробовать?

Примеры

Ниже Git дифференциалы для демонстрации того, что происходит.

Пример повторного заказа схеме:

create_table "accounts", :force => true do |t| 
    t.integer "organisation_id" 
- t.boolean "active",    :default => false 
    t.text  "notes" 
+ t.boolean "active",    :default => false 
    end 

Пример добавления вкладки в схему:

create_table "comments", :force => true do |t| 
- t.integer "commentable_id", :default => 0 
- t.string "commentable_type", :default => "" 
+ t.integer "commentable_id",  :default => 0 
+ t.string "commentable_type", :default => "" 
- t.datetime "created_at",      :null => false 
- t.datetime "updated_at",      :null => false 
+ t.datetime "created_at",       :null => false 
+ t.datetime "updated_at",       :null => false 
+0

Что заставляет вас думать, что пробелы являются вкладками? Любой шанс увидеть все до и после версий одного из этих 'create_table'? –

+0

@muistooshort Спасибо, они могут быть пробелами – Coderama

+1

Первый означает, что не все столбцы находятся в одном порядке внутри базы данных, сравнивают вывод '\ d accounts' внутри' psql', и вы найдете виновника; это может произойти по-разному и не должно быть проблемой. Второй вариант - это, скорее всего, просто объект выравнивания (т. Е. Все параметры ': default => ...'), но это трудно сказать, не видя целых файлов до и после 'schema.rb'. –

ответ

-12

Вы просто должны игнорировать schema.rb от вашего контроля версий. Он меняется по-разному в зависимости от порядка миграции и кто их создал. Вам нужны только миграции для создания соответствующей схемы для каждого разработчика, участвующего в проекте.

С уважением.

+3

* Исправление *: вы просто должны ** НИКОГДА не игнорировать schema.rb из вашего контроля версий. http://stackoverflow.com/questions/6520017/is-it-a-good-idea-to-put-db-schema-rb-to-gitignore-list – Dorian

0

Я подозреваю, что эта ошибка вызвана различной конфигурацией белых пространств («ширина табуляции», если вы используете возвышенное).

2

Я построил камень для решения этой проблемы.

Он сортирует столбцы, имена индексов и внешние ключи, удаляет лишние пробелы и запускает Rubocop для некоторого форматирования, чтобы унифицировать вывод вашего файла schema.rb.

https://github.com/jakeonrails/fix-db-schema-conflicts

После того, как вы добавите его в Gemfile вы просто запустить грабли БД: мигрировать или грабли БД: схемы: сбросить как нормальный.

+1

Thankyou! Это должно быть в Rails core – mahemoff

+0

Привет, рад, что это помогло кому-то! – jakeonrails

+2

@ jakeonrails Я нашел это совершенно случайно. Я подозреваю, что добавить слово «сортировка» к вам, имя gem получит дополнительное внимание. Отличная работа, спасибо! – user3763682