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

Bla*_*man 155 database ruby-on-rails seeding

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

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

Jac*_*kCA 275

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

  • 请注意:如果在生产中,您可能必须重新启动rails服务器才能更改要显示/要更新的页面. (4认同)

laf*_*ste 159

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

  1. rake db:reset:从schema.rb加载
  2. rake db:drop db:create db:migrate db:seed:来自迁移的负载

确保没有与db(rails server,sql client ..)的连接,否则db不会丢弃.

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

rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)


Daz*_*win 8

从 Rails 5 开始,rake命令行工具的别名已经变成了rails现在这样

rails db:reset 代替 rake db:reset

也能正常工作


MZa*_*oza 7

在 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
Run Code Online (Sandbox Code Playgroud)


Tom*_*ndt 6

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

/sf/answers/1047052541/上有一个"肮脏的黑客" 来添加一个类似于向上和向下迁移的"去除种子"操作......