【问题标题】:Duplicate column name error when running migration运行迁移时出现重复列名错误
【发布时间】:2012-10-31 06:41:06
【问题描述】:

每当我在 Rails 应用程序中运行迁移时,都会收到来自 SQLite3 的错误:

SQLite3::SQLException: duplicate column name: photo_file_name: ALTER TABLE "users" ADD "photo_file_name" varchar(255)

我已经进行了“向用户添加照片”迁移。这里是:

class AddAttachmentPhotoToUsers < ActiveRecord::Migration
   def self.up
     change_table :users do |t|
     t.has_attached_file :photo
    end
   end

  def self.down
   drop_attached_file :users, :photo
  end
end

这是用户迁移:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
    t.string :name
    t.string :title
    t.string :department
    t.text :skills
    t.boolean :available

    t.timestamps
   end
 end
end

我对此有点困惑,因为它告诉我有一个重复的列名“photo_file_name”,但我需要将它添加到用户表中?那没有意义。我不需要删除它吗?

如果您需要有关我的应用的任何其他详细信息,请告诉我。

【问题讨论】:

    标签: ruby-on-rails sqlite migration paperclip


    【解决方案1】:

    如果您的迁移与数据库架构不同步,就会发生这种情况。如果

    • 您“手动”修改了数据库架构
    • 您更改了正在运行的迁移文件
    • schema_migrations 表中的迁移尚未更新

    如果您不依赖数据库中的数据,rake db:reset 将从头开始重新运行所有迁移。否则,您必须通过添加到 schema_migrations 表中来将冲突的迁移识别为已运行。

    参见RailsGuides of migrations。

    【讨论】:

    • 好的。我尝试重置数据库,然后收到此消息:“您有 1 个待定迁移:20121105002856 AddAttachmentPhotoToUsers”。然后它要求我运行 db:migrate,我收到与以前相同的错误。
    • 我敢打赌,您将在两个迁移文件中添加 photo_file_name 列。删除或修改一个。顺便说一句,你在使用回形针吗?
    • 我已经添加了我的迁移文件。那里没有photo_file_name。它在 schema.rb 文件中。是的,我正在使用回形针。我应该尝试将photo_file_name 添加到其中一个迁移中吗?
    • 另一种更暴力的方法:尝试删除开发数据库文件并再次运行rake db:create 和rake db:migrate。免责声明:您将丢失开发数据库数据。
    • 做到了。非常感谢!
    【解决方案2】:

    我还通过登录 heroku 数据库解决了这个问题,然后只删除了有问题的列。我认为这是一个破坏性较小的解决方案。

    【讨论】:

      【解决方案3】:
      • 从工作台中删除开发架构
      • 运行rails db:create db:migrate

      【讨论】:

        猜你喜欢
        • 2018-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 2016-12-29
        • 2020-01-06
        • 2017-07-03
        相关资源
        最近更新 更多