【问题标题】:Mistakenly named migration - rake db:migrate rejected错误命名的迁移 - rake db:migrate 被拒绝
【发布时间】:2014-09-17 18:12:14
【问题描述】:

这在我身上发生过几次,以下只是表名和一些参数的示例:

我在迁移rails g migration AddOwnerToRestaurant owner:string并运行rake db:migrate时添加详细信息时错误地命名了一个表;

我销毁迁移rails destroy migration AddOwnerToRestaurant owner:string并运行rake db:rollback

然后我使用相同的详细信息正确重命名表格 rails g migration AddOwnerToRestaurantsrake db:migrate...

我不断收到错误消息

StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: owner

为什么不使用第一个rails destroy 命令删除所有者列?我无法将新添加的内容迁移到表中。

【问题讨论】:

    标签: mysql ruby-on-rails ruby database-migration


    【解决方案1】:

    rollback 不知道您的数据库过去是什么样子。它会查看最后一次迁移并撤消 change 方法中的任何内容,假设您只调用 rails 知道如何反转 (list) 的方法。

    当您首先使用 rails destroy migration 删除迁移时,回滚无法按照您希望的方式完成工作。不要删除迁移,而是将其回滚并重写,然后再次向上迁移。

    另外,销毁迁移时不需要列信息

    【讨论】:

      【解决方案2】:

      既然你删除了文件,那么做:

      rake db:migrate:status
      

      它将显示丢失文件的 ID。所以你可以重新创建它然后回滚。

      rake db:rollback STEP=n
      

      “n”是上次迁移的回滚次数。

      不要再破坏它。相反,创建新的迁移来消除以前的错误。

      【讨论】:

      • 迁移在事务中运行。如果失败,假设您的数据库支持事务,OP 支持事务,它将自动被清理
      • 糟糕。没有意识到。谢谢。改变了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2018-10-06
      • 2017-01-07
      相关资源
      最近更新 更多