【问题标题】:What do you do when a migration won't migrate down?当迁移不会向下迁移时,您会怎么做?
【发布时间】:2016-01-06 15:22:50
【问题描述】:

我决定不使用 gem 'acts_as_taggable_on',但由于某种原因我无法撤消迁移。有5个:

   ** ^ more migrations ^ **
   up     20151018064454  Acts as taggable on migration.acts as taggable on engine
   up     20151018064455  Add missing unique indices.acts as taggable on engine
   up     20151018064456  Add taggings counter cache to tags.acts as taggable on engine
  down    20151018064457  Add missing taggable index.acts as taggable on engine
  down    20151018064458  Change collation for tag names.acts as taggable on engine
  ** v more migrations v **

当我运行 rake db:migrate:down VERSION=20151018064456 时出现错误:

PG::UndefinedColumn: ERROR: 关系“tags”的列“taggings_count”不存在

ActiveRecord::StatementInvalid: PG::UndefinedColumn: 错误: 关系“tags”的列“taggings_count”不存在 : ALTER TABLE "tags" DROP "taggings_count"

PG::UndefinedColumn: 错误:关系的列“taggings_count” “标签”不存在

我从最近到最早一次运行它们。如果这些不运行,我该怎么办?

【问题讨论】:

  • 向我们展示失败的迁移可能 ..uhhhm.. 有助于诊断。
  • def self.down remove_column :tags, :taggings_count end
  • 如果您的数据库正在开发中,请尝试rake db:migrate:reset,它将回滚所有迁移并从头开始迁移,以便您拥有一个没有任何数据的干净数据库!

标签: ruby-on-rails ruby postgresql activerecord


【解决方案1】:

你可以这样试试:

rake db:rollback 会让你后退一步

然后

rake db:rollback STEP=n

将为您回滚 n 迁移,其中 n 是您要回滚的最近迁移的数量。

希望这会有所帮助!

【讨论】:

  • 我需要从 20151018064458 开始,之后还有更多的迁移。回滚与向下有什么不同吗?
  • 嗨,或多或少:db:migrate:down 回滚一个特定的迁移 db:rollback 回滚最后一个迁移,通常你使用回滚,因为它会清除表并在必要时删除它们,因此 migrate:down 可能会在您的数据库上留下一些垃圾,尽管尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2022-07-07
  • 2019-12-24
  • 2011-06-01
  • 2014-05-22
  • 2020-03-22
  • 1970-01-01
相关资源
最近更新 更多