Migration Ruby rails的回退速度不够快

Migration Ruby rails的回退速度不够快,migration,rake,rollback,Migration,Rake,Rollback,我尝试rake db:rollback STEP=6或更多,但当我运行rake db:migrate时,它只显示正在执行的最后一个迁移文件: ==2015050840222 CreateStructure:正在迁移================================== ==2015050840222 CreateStructure:迁移0.0000s========================= 当我尝试使用rails控制台和puts User.new.inspect检查是否在

我尝试rake db:rollback STEP=6或更多,但当我运行rake db:migrate时,它只显示正在执行的最后一个迁移文件:

==2015050840222 CreateStructure:正在迁移================================== ==2015050840222 CreateStructure:迁移0.0000s=========================

当我尝试使用rails控制台和puts User.new.inspect检查是否在上一步中创建了新字段时,它显示仍然缺少这些字段

如何回滚以使其执行我编辑的事务文件

[编辑]

当我尝试使用rake db:migrate VERSION=20150328013052回滚时,它在最后一次迁移时失败,因为它无法删除不存在的字段。我想我修改了迁移,在迁移已经执行之后添加了这些字段,所以这些字段不存在。我该怎么办?我尝试在schema.rb中修改时间戳并运行migrate,但看起来这并不是跟踪当前版本的原因

class AddLoginToUsers < ActiveRecord::Migration
  def change
    add_column :name, :password, :string
  end
end
==2015050840222 CreateStructure:还原================================== ==2015050840222 CreateStructure:还原为0.0273s=========================

==20150506210153 AddLoginToUsers:正在还原================================== -删除列:名称,:密码,:字符串rake中止!StandardError:发生了一个错误,包括此迁移和所有以后的迁移 取消:

找不到表 'name'/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:517:在表结构中' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:431:inprimary\u key' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u-record/connection\u-adapters/sqlite3\u-adapter.rb:538:in copy\u table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:533:inmove\u table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:526:在alter\u表的块中' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:211:in 交易' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:525:in alter\u table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:467:inremove\u列' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:662:in 方法“”中的块丢失' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:632:in 用“时间”挡在say_中 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:632:in 用“时间”说“你” /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:652:in 方法_缺失' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:497:in “还原”中的块 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:496:in 各自的 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:496:in 回复' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:604:in 行政人员"迁移" /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:590:in “迁移”中的块2级别 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:589:in “迁移”中的块 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/abstract/connection\u pool.rb:292:in 与_连接' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:588:in 迁移' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:765:in 迁移' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:995:in 执行\u迁移\u中的块\u事务' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:1041:in ddl_事务中的块' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:213:in 事务中的阻塞' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/abstract/transaction.rb:188:in 在“新交易”中 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:213:in 交易' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/transactions.rb:220:in transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:1041:in ddl_事务' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:994:in 在\u事务中执行\u迁移\u /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:956:in “迁移”中的块 /var/lib/gems/1.9.1/gems/activerecor d-4.2.0/lib/active_record/migration.rb:952:in 各自的 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:952:in 迁移' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:827:in 向下 /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/migration.rb:802:in 迁移' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/tasks/database\u tasks.rb:137:in 迁移' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active\u record/railties/databases.rake:44:in “Tasks:TOP=>db:migrate”中的块2级别请参见 通过使用-trace运行任务完成完整跟踪

[编辑]


好的,我明白了,我只是需要清空迁移来反转它们,然后继续重写它们。问题已解决。

通过打开位于db/Schema.rb中的Schema.rb文件,我可以找到架构的当前状态,第一行如下所示:

ActiveRecord::Schema.define(version: 20150507210038) do
add_column :users, :password, :string
将该版本号与db/migrate文件夹中的迁移匹配。也许您已经处于适当的迁移阶段。要返回迁移,我建议:

rake db:migrate VERSION=20080906120000
其中,版本号对应于迁移文件名上的版本

[更新]

错误在这里:

class AddLoginToUsers < ActiveRecord::Migration
  def change
   add_column :name, :password, :string
  end
end
确保桌子是多元化的。检查Schema.rb文件以查看表。由于这是users表,您的意思可能是:

ActiveRecord::Schema.define(version: 20150507210038) do
add_column :users, :password, :string
如果模式有问题,可以完全转储数据库并重新创建。我会编辑适当的迁移,删除导致问题的迁移,然后通过运行以下命令转储并重新创建数据库:

rake db:drop db:create db:migrate

然后,您可以运行另一个迁移以添加新列。当然,您可以在重新创建数据库之前将这些迁移添加到现有迁移中。希望这能有所帮助。

我尝试使用版本回滚,我想我明白了为什么它不起作用。请检查上面。