【问题标题】:Reset the database (purge all), then seed a database重置数据库(清除所有),然后为数据库播种
【发布时间】:2011-04-29 13:44:56
【问题描述】:

是否有 rake 命令可以清除数据库表中的数据?

如何创建 db:seed 脚本以将数据预填充到我的表中?

【问题讨论】:

    标签: ruby-on-rails database seeding


    【解决方案1】:

    在 Rails 6 上,您现在可以执行类似的操作

    rake db:seed:replant 这会针对当前环境截断每个数据库的表并加载种子

    https://blog.saeloun.com/2019/09/30/rails-6-adds-db-seed-replant-task-and-db-truncate_all.html

    $ rails db:seed:replant --trace
    ** Invoke db:seed:replant (first_time)
    ** Invoke db:load_config (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute db:load_config
    ** Invoke db:truncate_all (first_time)
    ** Invoke db:load_config
    ** Invoke db:check_protected_environments (first_time)
    ** Invoke db:load_config
    ** Execute db:check_protected_environments
    ** Execute db:truncate_all
    ** Invoke db:seed (first_time)
    ** Invoke db:load_config
    ** Execute db:seed
    ** Invoke db:abort_if_pending_migrations (first_time)
    ** Invoke db:load_config
    ** Execute db:abort_if_pending_migrations
    ** Execute db:seed:replant
    

    【讨论】:

    • 很好的解决方案 - 比删除整个数据库更简单,干扰更少!
    • 我很高兴这能够提供帮助。我认为这是 2020 年应该这样做的方式,但这个原始问题在 2010 年再次被问到
    • 鉴于它是 Rails 6 的功能 - 看来 Rails 开发人员同意你的看法 ?
    【解决方案2】:

    当您想要删除本地数据库并从 db/seeds.rb 加载的数据重新开始时,您可以使用 rake db:reset。当您仍在确定架构并且经常需要向现有模型添加字段时,这是一个有用的命令。

    使用重置命令后,它将执行以下操作: 删除数据库:rake db:drop 加载架构:rake db:schema:load 播种数据:rake db:seed

    但是如果你想完全删除你的数据库,你可以使用rake db:drop。删除数据库也将删除任何模式冲突或错误数据。如果您想保留您拥有的数据,请务必在运行此命令之前对其进行备份。

    这是一篇关于最重要的rake database commands 的详细文章。

    【讨论】:

      【解决方案3】:

      从 Rails 5 开始,rake 命令行工具已别名为 rails,所以现在

      rails db:reset 而不是rake db:reset

      同样有效

      【讨论】:

        【解决方案4】:

        如果您不想删除并重新创建整个 shebang 只是为了重新加载您的数据,您可以在 seed.db 文件中使用 MyModel.destroy_all(或 delete_all)在您的 MyModel.create!(...) 之前清理一个表语句加载数据。然后,您可以一遍又一遍地重做db:seed 操作。 (显然,这只会影响您已将数据加载到其中的表,而不影响其余表。)

        https://stackoverflow.com/a/14957893/4553442 有一个“肮脏的 hack”,用于添加类似于上下迁移的“去种子”操作...

        【讨论】:

        • 聪明,每次从头开始重新创建所有东西对我来说都需要很长时间
        【解决方案5】:

        您可以删除所有内容并重新创建数据库+种子:

        1. rake db:reset:从 schema.rb 加载
        2. rake db:drop db:create db:migrate db:seed:从迁移中加载

        确保您没有与 db(rails 服务器、sql 客户端..)的连接,否则 db 不会丢失。

        schema.rb 是您的数据库当前状态的快照,由以下各项生成:

        rake db:schema:dump
        

        【讨论】:

        • 感谢您提醒人们关闭任何服务器以确保正确删除数据库。
        【解决方案6】:

        我使用rake db:reset 删除然后重新创建数据库并包含您的seeds.rb 文件。 http://guides.rubyonrails.org/migrations.html#resetting-the-database

        【讨论】:

        • 附注:如果在生产环境中,您可能必须重新启动 rails 服务器才能显示更改/更新页面。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        相关资源
        最近更新 更多