Миграция 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 из вашего контроля версий. Он меняется по-разному в зависимости от порядка миграции и кто их создал. Вам нужны только миграции для создания соответствующей схемы для каждого разработчика, участвующего в проекте.

С уважением.