ruby-on-rails - started - установка postgresql rails




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

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

В 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 .

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

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


Для этого я просто настроил фильтр 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

Дополнительную информацию о filters git см. В документации по gitattributes .


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

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


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

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

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





postgresql