Rails迁移总是插入空格或更改模式中列的顺序

时间:2013-07-18 02:27:13

标签: ruby-on-rails ruby-on-rails-3.2 postgresql-9.2 rails-postgresql pg

我的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

4 个答案:

答案 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。它会根据迁移顺序和生成它们的人而有所不同。您只需要迁移为项目中涉及的每个开发人员生成适当的模式。

问候。