Подтвердить что ты не робот

Почему rake db: migrate иногда добавляет конечные пробелы в struct.sql?

На некоторых наших машинах для разработчиков rake db:migrate добавляет конечный пробел в structure.sql, что очень раздражает, потому что каждый раз, когда происходит изменение базы данных, мы должны сначала удалить все конечные пробелы из файла.

Кто-нибудь знает, что может быть с этим? Откуда берутся пробелы? Это связано с PostgreSQL или это что-то еще?

4b9b3361

Ответ 1

Это лучший день в моей жизни, а может и твой

В PG 11 этой ошибки больше нет, поскольку Tablespace не записывается в дамп. Таким образом, вы можете обновить свою версию PG и избавиться от крючка, который у вас был для удаления места.

Ответ 2

Вот решение, которое вы можете зафиксировать для управления версиями: обрезайте конечный пробел как db:migrate.

В lib/tasks/db.rake:

namespace :db do
  def remove_whitespace_in_structure
    if Rails.env.development?
      `sed -i '' -e's/[[:space:]]*$//' db/structure.sql`
    end
  end

  task :migrate do
    remove_whitespace_in_structure
  end
end

Вышеприведенный код может выглядеть как перезапись db:migrate, но это крючок, который будет запускаться сразу после обычной задачи db:migrate.

Ответ 3

Я просто настроил для этого git-фильтр. К сожалению, это не то, что вы можете добавить в репозиторий; каждый член команды должен будет это настроить.

В .gitconfig (или .git/config)

[filter "remove-trailing-whitespace"]
  clean = sed -E 's/[[:space:]]*$//'
  smudge = cat

В .gitattributes или .git/info/attributes

db/structure.sql filter=remove-trailing-whitespace

См. Документацию по gitattributes для получения дополнительной информации о filters git.

Ответ 4

Имея ту же проблему, я добавляю изменения, которые имеют реальный эффект через git add -i db/structure.sql, а затем git checkout db/structure.sql, так что различия в пробелах будут опущены.

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

Ответ 5

Это происходит из-за различий в версии вашей базы данных на каждой машине.

Вы можете либо иметь одну и ту же версию, либо в текстовом редакторе есть возможность обрезать конечные пробелы при сохранении. В Sublime добавьте эту строку в свои настройки: "trim_trailing_white_space_on_save": true

Ответ 6

Я использую этот камень в одном из моих проектов, и он выполняет эту работу.

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

Когда вы запустите rake db:migrate, он запускает пару хороших вещей; одна из них - это команда sed, которая удаляет ненужные пробелы.