运行迁移时出现重复的列名错误

每当我在我的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”,但我需要将它添加到Users表中? 这没有意义。 我不应该删除它吗?

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

如果迁移与数据库架构不同步,则会发生这种情况。 如果这可能发生

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

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

另请参阅Rails指南 。

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

  • 从工作台中删除开发模式
  • 运行rails db:create db:migrate