重置数据库(清除所有),然后播种数据库

时间:2010-10-23 12:35:55

标签: ruby-on-rails database seeding

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

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

6 个答案:

答案 0 :(得分:273)

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

答案 1 :(得分:157)

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

  1. rake db:reset:从schema.rb
  2. 加载
  3. rake db:drop db:create db:migrate db:seed:从迁移加载
  4. 确保没有与db(rails server,sql client ..)的连接,否则db不会丢弃。

    schema.rb是由以下内容生成的数据库当前状态的快照:

    rake db:schema:dump
    

答案 2 :(得分:6)

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

有一个"肮脏的黑客"在https://stackoverflow.com/a/14957893/4553442添加" de-seeding"操作类似于上下移动......

答案 3 :(得分:3)

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

rails db:reset代替rake db:reset

也可以正常工作

答案 4 :(得分:2)

在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

答案 5 :(得分:0)

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

使用reset命令后,它将执行以下操作: 删除数据库:rake db:drop 加载架构:rake db:schema:load 为数据设定种子:rake db:seed

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

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