rake db:rollback不工作?

时间:2012-07-03 23:56:20

标签: ruby-on-rails

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

docs说我可以使用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

4 个答案:

答案 0 :(得分:68)

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

rake db:migrate:status

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

答案 1 :(得分:6)

这对我有用。结合this answer中给出的步骤和以dB为单位的评论。

  1. 运行rake db:migrate:status
  2. 如果您有**** NO FILE ****条目,请将版本号记录为noFileVersion。请注意没有文件条目(stable_version)的条目版本。
  3. 创建了一个&#34;虚拟&#34;文件名为noFileVersion_create_nothing.rb,正文为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以检查没有文件条目消失。

答案 2 :(得分:2)

如果

rake db:migrate:status

为您提供了一个说

的迁移

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

然后,最好的办法是做一个(注意以下命令将删除数据库):

rake db:reset

重做所有迁移。如果上次迁移失踪,那么schema.rb将进行rake db:migrate将要查找的上一次迁移:

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

将该号码更改为迁移文件夹中的最后一个。

答案 3 :(得分:1)

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

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

这是回滚上一次迁移的最新版本号