【问题标题】:Rails: Rollback MistakeRails:回滚错误
【发布时间】:2016-05-17 22:46:28
【问题描述】:

我创建了一个名为“property”的表,但我还没有迁移它。然后我想删除该表,所以当我执行rake db:rollback 时,如下所示。我以前创建的表,我根本不想删除,现在已恢复。我应该如何恢复我的模型“评论”,而只删除最后一个模型“属性”。

有些 cmets 说做“重做”或“运行迁移”,但如果我做 rake db:migrate,我觉得它会永久删除评论模型。我错了吗?什么是恢复我的评论模型的正确解决方案?

:~/workspace (revoke) $ rails g model property title address note price$ priceW 
Running via Spring preloader in process 3066
      invoke  active_record
      create    db/migrate/20160517222114_create_properties.rb
      create    app/models/property.rb
      invoke    test_unit
      create      test/models/property_test.rb
      create      test/fixtures/properties.yml
:~/workspace (revoke) $ bundle exec rake db:rollback
== 20160506122941 CreateComments: reverting ===================================
-- drop_table(:comments)
   -> 0.0011s
== 20160506122941 CreateComments: reverted (0.0096s) ==========================

【问题讨论】:

    标签: ruby-on-rails ruby rollback dbmigrate


    【解决方案1】:

    完成rake db:rollback 后,您就对数据库进行了更改。在这种情况下,它删除了您的 comments 表,正如您在输出中看到的那样:drop_table(:comments)。数据已经消失了。我们都至少去过一次。

    运行rake db:migrate 将恢复comments 表结构,但不会恢复其中的数据。在这种情况下,如果您想知道您的新表 property 未迁移,您可以运行 rake db:migrate 运行所有新迁移,然后运行一次 rake db:rollback 以回滚 property 的迁移.

    【讨论】:

    • 感谢您的回答!有没有办法恢复 cmets 表中的数据?
    • 不幸的是,没有标准的方法。如果您有日志文件,您可能可以从那里恢复comments 的内容,但这需要一些搜索。您需要找到 POST 到您的 /comments 路由(或 /parent/comments,如果它是嵌套的)的日志条目,并查找该操作的 params 哈希。
    • 听上去真的很难……不过非常感谢您提供的信息~!
    • 这仅取决于您希望该数据返回的程度。大多数时候,尤其是在开发环境中,不值得付出努力。但是,如果您在生产环境中,则可能必须通过所有这些努力来恢复关键数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多