耙数据库:回滚不工作?

我在写我的第一个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 

解决scheme(请参阅我的评论):运行

 rake db:migrate:status 

并纠正您在那里find的问题。 在这种情况下(每@MarkThomas的后续),你可能想要检查你需要的所有文件。

如果

 rake db:migrate:status 

给你一个迁移说

up 20120702151447 ********** NO FILE **********

那么最好的办法是做一个(注意下面的命令将删除数据库):

 rake db:reset 

重做所有的迁移。 如果最后一次迁移是缺less的迁移,那么schema.rb将具有最后一次迁移: rake db:migrate将查找:

ActiveRecord::Schema.define(:version => 20120702151447) do

将该数字更改为您的迁移文件夹中的最后一个。

这是为我工作。 结合本答案给出的步骤和以dB为单位的注释。

  1. 运行rake db:migrate:status
  2. 如果你有一个**** NO FILE ****条目,只需要注意版本号为noFileVersion。 请注意刚才没有文件条目(stable_version)的条目的版本。
  3. 创build了名为noFileVersion_create_nothing.rb的“虚拟”文件,并创build了主体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来检查是否没有文件条目已经消失。