我的rails迁移使用空格和表列的位置更新架构,这是一个令人沮丧的问题。
因此,大多数情况下,当我运行bundle exec rake db:migrate
时,它会执行以下方案之一。当我将它合并到我们的主分支中并且其他开发人员解决这个问题时,他们的rails迁移会恢复标签和位置排序。
我们注意到,如果我是模式的最后一个提交者,那么团队中的所有三个开发人员在运行迁移时都会遇到相同的问题。
我刚刚更新了与其他开发者相同的postgres to v9.2.4
。关于我还能尝试什么的任何想法?
下面是git diffs来演示正在发生的事情。
重新排序架构的示例:
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
答案 0 :(得分:4)
我建造了一个宝石来解决这个问题。
它对列,索引名和外键进行排序,删除多余的空格并运行Rubocop以进行某些格式化以统一schema.rb文件的输出。
https://github.com/jakeonrails/fix-db-schema-conflicts
将它添加到您的Gemfile之后,您只需运行rake db:migrate或rake db:schema:dump就像正常一样。
答案 1 :(得分:1)
好消息! Rails最终推出了一个更新程序,该更新程序可以解决此问题。从Rails v5.1.0开始,默认(也是唯一的选择)是删除列之间的任何多余空格。
答案 2 :(得分:0)
我怀疑这个错误是由白色空格的不同配置引起的(如果你使用的是sublime,则为'tab width')。
答案 3 :(得分:-13)
您应该忽略版本控制中的schema.rb。它会根据迁移顺序和生成它们的人而有所不同。您只需要迁移为项目中涉及的每个开发人员生成适当的模式。
问候。