耙数据库:回滚不工作?
我在写我的第一个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为单位的注释。
- 运行rake db:migrate:status
- 如果你有一个**** NO FILE ****条目,只需要注意版本号为noFileVersion。 请注意刚才没有文件条目(stable_version)的条目的版本。
- 创build了名为noFileVersion_create_nothing.rb的“虚拟”文件,并创build了主体
class CreateNothing < ActiveRecord::Migration def change end end
- 运行rake db:migrate VERSION = stable_version
- 手动删除noFileVersion_create_nothing.rb。
- 运行rake db:migrate。
- 运行rake db:migrate:status来检查是否没有文件条目已经消失。