27

在我们的一些开发人员机器上rake db:migrate添加了尾随空格,structure.sql这真的很烦人,因为每次对数据库进行更改时,我们都必须首先从文件中删除所有尾随空格。

任何人都知道这可能是怎么回事?空白从哪里来?它与PostgreSQL有关还是其他?

4

6 回答 6

10

这是您可以提交给版本控制的解决方案:将尾随空格修剪为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任务之后立即运行的钩子。

于 2015-07-06T17:26:32.970 回答
7

我只是为此设置了一个 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

有关git 的更多信息,请参阅有关 gitattributes 的文档filters

于 2015-03-24T00:18:57.533 回答
1

遇到同样的问题,我通过a添加了有实际效果的更改git add -i db/structure.sql然后git checkout db/structure.sql省略了空格的差异。

我们在团队中考虑的替代方案是使用另一个 gem 来跟踪数据库。

于 2014-06-25T12:57:19.607 回答
1

这是我一生中最美好的一天,也许是你的:

PG 11中,此错误不再存在,因为Tablespace未写入转储。因此,您可以升级您的 PG 版本并摆脱删除空间的钩子。

于 2019-04-30T09:11:12.303 回答
0

发生这种情况是因为每台机器上的数据库版本不同。

您可以都拥有相同的版本,或者在您的文本编辑器中让它在保存时修剪尾随空格。在崇高的将此行添加到您的设置中: "trim_trailing_white_space_on_save": true

于 2016-06-22T15:00:32.377 回答
-2

我在我的一个项目中使用了这个 gem,它完成了这项工作。

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

当你运行rake db:migrate它时,它会运行一些好东西;其中之一是sed删除不必要的空格的命令。

于 2015-07-27T19:58:49.253 回答