在我们的一些开发人员机器rake db:migrate
上添加尾部空格到structure.sql
这真的很烦人,因为每次对数据库进行更改时,我们必须首先从文件中删除所有尾随空格。< / p>
任何人都知道该怎么办?空白从哪里来?它与PostgreSQL有关还是别的什么?
答案 0 :(得分:9)
这是一个可以提交版本控制的解决方案:将尾随空格修剪为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
任务之后运行。
答案 1 :(得分: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 filters
的更多信息,请参阅documentation on gitattributes。
答案 2 :(得分:1)
遇到同样的问题,我通过git add -i db/structure.sql
然后git checkout db/structure.sql
添加具有实际效果的更改,以便省略空格中的差异。
我们团队中考虑的替代方案是使用另一个gem来跟踪数据库。
答案 3 :(得分:0)
这是因为每台计算机上数据库的版本差异。
您可以拥有相同的版本,也可以在文本编辑器中保存时修剪尾随空格。
在sublime中将此行添加到您的设置:
"trim_trailing_white_space_on_save": true
答案 4 :(得分:0)
这是我一生中最好的一天,也许是你的一天:
在PG 11中,此错误不再存在,因为Tablespace
未写入转储。因此,您可以升级PG版本并摆脱空间删除的麻烦。
答案 5 :(得分:-2)
我在我的一个项目中使用这个gem并且它完成了这项工作。
https://github.com/jakeonrails/fix-db-schema-conflicts
当你运行rake db:migrate
时,它会运行一些好东西;其中一个是删除不必要的空格的sed
命令。