Миграция 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
Ответы
Ответ 1
Я создал камень для решения этой проблемы.
Он сортирует столбцы, имена индексов и внешние ключи, удаляет лишние пробелы и запускает Rubocop для некоторого форматирования, чтобы унифицировать вывод вашего файла schema.rb.
https://github.com/jakeonrails/fix-db-schema-conflicts
После того, как вы добавите его в свой Gemfile, вы просто запустите rake db: migrate or rake db: schema: dump, как обычно.
Ответ 2
Хорошие новости! Rails наконец выпустил обновление, которое решает именно это. Начиная с Rails v5.1.0, по умолчанию (и единственный вариант) убираются лишние пробелы между столбцами.
Ответ 3
Я подозреваю, что эта ошибка вызвана другой конфигурацией белых пробелов ( "ширина табуляции", если вы используете возвышенный).
Ответ 4
Вам просто следует игнорировать schema.rb из вашего контроля версий. Он меняется по-разному в зависимости от порядка миграции и кто их создал. Вам нужны только миграции для создания соответствующей схемы для каждого разработчика, участвующего в проекте.
С уважением.