Ruby rails的耙子不能回滚得足够远

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

== 20150508040222 CreateStructure:迁移================================== == 20150508040222 CreateStructure:迁移(0.0000s) =========================

当我尝试使用“rails console”和“puts User.new()。检查”来检查是否在上一步中创建了新字段时,它显示这些字段仍然缺失。

如何回滚以便它将执行我编辑的交易文件?

[编辑]

当我使用“rake db:migrate VERSION = 20150328013052”尝试回滚时,它在第二次迁移时失败,因为它无法删除不存在的字段。 我认为我修改了迁移以在迁移完成后添加这些字段,因此这些字段不存在。 我该怎么办? 我尝试修改schema.rb中的时间戳并运行迁移,但看起来这不是跟踪当前版本的内容。

class AddLoginToUsers < ActiveRecord::Migration
  def change
    add_column :name, :password, :string
  end
end

== 20150508040222 CreateStructure:恢复================================== == 20150508040222 CreateStructure:恢复(0.0273s) =========================

== 20150506210153 AddLoginToUsers:恢复================================== - remove_column(:name,:password, :字符串)耙中止! StandardError:发生错误,已取消此次及以后的所有迁移:

无法找到表'name'/ var / lib / gems / 1.9.1 / gems / activerecord-4.2.0 / lib / active_record / connection_adapters / sqlite3_adapter.rb:517:在table_structure' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:431:in /var/lib/gems/ table_structure' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:431:in primary_key' table_structure' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:431:in sqlite3_adapter.rb:538:in copy_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:533:in '/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb: copy_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:533:in :in copy_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:533:in '/ var / lib / gems / 1.9.1 / gems / activerecord-4.2.0 / lib / active_record / connection_adapters / sqlite3_adapter.rb:526: block in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in中的block in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in transaction' block in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:467:in block in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:467:in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:467:in remove_column'/var/ block in method_missing' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:632:in alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:467:in 662 alter_table' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:467:in block in method_missing' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:632:in在say_with_time block in method_missing' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:632:in块中/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb: 632:在say_with_time' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:652:in : say_with_time' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:652:in :in method_missing'/ say_with_time' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:652:in activerecord-4.2.0 / lib / active_record / migration.rb:497:在block in revert' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:496:in每个'/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:496:在revert' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:604:in exec_migration' revert' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:604:in 590 revert' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:604:in block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in lib/ block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in 1.9.1/ block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in activerecord- block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in lib/ block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in 589: block (2 levels) in migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:589:in blo ck in migrate'/ with_connection' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:588:in in with_connection' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:588:in migrate'/ with_connection' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:588:in :在migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:995:in :在execute_migration_in_transaction中的块'/var/lib/gems/1.9.1/gems /activerecord-4.2.0/lib/active_record/migration.rb:1041:in ddl_transaction中的block in ddl_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in事务block in ddl_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in块中/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/transaction.rb:188:in within_new_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in transaction'/ within_new_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in ems / 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_record/migration.rb:1041:in /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041 transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041:in ddl_transaction'/var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:994: transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:1041:in execute_migration_in_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:956:in var/lib/gems/1.9.1/gems/activerecord- execute_migration_in_transaction' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:956:in在迁移块” /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in each' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:952:in migrate'/var/lib/gems/1.9.1/gems/activerecord-4.2。 0 / lib / active_record / migration.rb:827:在down' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/migration.rb:802:in migrate'/ var / lib / gems / 1.9.1 / gems / activerecord-4.2.0 / lib / active_record / tasks / database_tasks.rb:137:在migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:44:in在'任务:TOP => db:migrate migrate' /var/lib/gems/1.9.1/gems/activerecord-4.2.0/lib/active_record/railties/databases.rake:44:in块(2级) 跟踪通过运行任务 - 跟踪)

[编辑]

好的,我明白了,我只需要清除迁移就可以撤消它们,并重新编写它们。 问题解决了。


我会通过打开schema.rb文件(位于db / schema.rb)中找到Schema的当前状态,第一行看起来像这样:

ActiveRecord::Schema.define(version: 20150507210038) do

将该版本号与db / migrate文件夹中的迁移进行匹配。 也许你已经在适当的迁移。 要回去迁移,我建议:

rake db:migrate VERSION=20080906120000

版本号与迁移文件名称上的版本相对应。

[UPDATE]

错误在这里:

class AddLoginToUsers < ActiveRecord::Migration
  def change
   add_column :name, :password, :string
  end
end

add_column具有以下要求:

add_column :table, :column_name, :column_type

确保桌子是多元化的。 检查您的Schema.rb文件以查看表格。 既然这是用户表,也许你的意思是这样的:

add_column :users, :password, :string

如果您在架构方面存在问题,则可以完全转储数据库并重新创建它。 我将编辑适当的迁移(删除引起问题的迁移),然后运行以下命令转储并重新创建数据库:

rake db:drop db:create db:migrate

然后,您可以运行其他迁移以添加新列。 您可以将这些添加到现有的迁移中,然后重新创建数据库。 希望有所帮助。

链接地址: http://www.djcxy.com/p/56901.html

上一篇: Ruby rails rake not rolling back far enough

下一篇: Deleted migrations and Heroku