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