rake db:rollback不工作?

dB'*_*dB' 42 ruby-on-rails

我正在编写我的第一个Rails应用程序.我已经运行了几rails generate model ...rake db:migrate命令,但现在我想改变我的数据模型,因此需要撤销了一些迁移.

文档说我可以撤消与迁移rake db:rollback,但是这是行不通的.当我在控制台中运行它时,计算机会想几秒钟,但不会对db/migrate/或进行任何更改db/migrate/schema.rb.没有输出打印到控制台.

这种行为是否正确?不db:rollback应该改变我的架构?如果是这样,有谁能想到为什么它可能不起作用?

我在Rails v.3.2.6上.

编辑

此刻rake db:migrate:status给出了

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20120617191211  Create irs
   up     20120701154357  Create paths
   up     20120701154421  Create nodes
   up     20120702151447  ********** NO FILE **********
  down    20120702155140  Create venues
  down    20120703233833  Remove path from venues
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 69

解决方案(参见我的评论):运行

rake db:migrate:status
Run Code Online (Sandbox Code Playgroud)

并纠正你在那里发现的问题.在这种情况下(根据@MarkThomas的后续内容),您可能希望检查所需的所有文件.

  • 谢谢,这很有效.但奇怪的是,我从来没有能够找到具有rails正在寻找的迁移ID的文件(20120702151447).最后,我创建了一个名为"20120702151447_create_nothing.rb"的"虚拟"文件,以及主体`类CreateNothing <ActiveRecord :: Migration def change end end`.这不是一个优雅的解决方案,但它完成了工作. (13认同)
  • 由于手动删除了一个gem,我有一些丢失的迁移文件.我没有创建虚拟文件,而是删除了`schema_migrations`表中的记录,例如:`从schema_migrations中删除其中的版本('20150424220749','20150424220748');`那为我修复了它. (11认同)

Amr*_*taB 6

这对我有用.结合本答案中给出的步骤并按dB进行评论.

  1. 运行rake db:migrate:status
  2. 如果您有****NO FILE****条目,请将版本号记录为noFileVersion.请注意没有文件条目(stable_version)的条目版本.
  3. 创建了一个名为noFileVersion_create_nothing.rb和body的"虚拟"文件 class CreateNothing < ActiveRecord::Migration def change end end
  4. 运行rake db:migrate VERSION = stable_version
  5. 手动删除noFileVersion_create_nothing.rb.
  6. 运行rake db:migrate.
  7. 再次运行rake db:migrate:status以检查没有文件条目消失.


kro*_*ine 6

以下对我有用: rake db:migrate:down VERSION=20190304092208

可以通过以下命令获取版本号: rake db:migrate:status

这是回滚最后一次迁移的最后一个版本号