我正在编写我的第一个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
答案 0 :(得分:68)
解决方案(请参阅我的评论):运行
rake db:migrate:status
并纠正您在那里发现的问题。在这种情况下(根据@MarkThomas的后续内容),您可能希望检查所需的所有文件。
答案 1 :(得分:6)
这对我有用。结合this answer中给出的步骤和以dB为单位的评论。
class CreateNothing < ActiveRecord::Migration
def change
end
end
答案 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
这是回滚上一次迁移的最新版本号