提问



我有一个充满数据的开发Ruby on Rails数据库。我想删除所有内容并重建数据库。我想要使​​用类似的东西:


rake db:recreate


这可能吗?

最佳参考


我知道有两种方法可以做到这一点:


这将重置您的数据库并使用all重新加载当前架构:


rake db:reset db:migrate


这将破坏您的数据库,然后创建它,然后迁移您当前的模式:


rake db:drop db:create db:migrate


两种情况下都会丢失所有数据。

其它参考1


在Rails 4上,所有需要的都是


$ rake db:schema:load


这将删除数据库上的全部内容,并从schema.rb文件重新创建架构,而无需逐个应用所有迁移。

其它参考2


我在终端使用以下一个班轮。


$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare


我把它作为shell别名并命名为remigrate


到现在为止,您可以轻松地链接Rails任务:


$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+

其它参考3


更新:随着Rails 5的出现,可以通过以下命令访问此命令:


rails db:purge db:create db:migrate RAILS_ENV=test





从最新的rails 4.2发布版开始,您现在可以运行:


rake db:purge 


来源:提交[46]


# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
  task :purge => [:load_config] do
    ActiveRecord::Tasks::DatabaseTasks.purge_current
  end


它可以像上面提到的一起使用:


rake db:purge db:create db:migrate RAILS_ENV=test

其它参考4


根据您的需要,您可以使用......



rake db:create


......从config/database.yml开始构建数据库,或者......



rake db:schema:load


...从schema.rb文件中从头开始构建数据库。

其它参考5


只需发出以下步骤:删除数据库,然后重新创建数据库,迁移数据,如果有种子,则播种数据库:


rake db:drop db:create db:migrate db:seed


由于rake的默认环境是 development ,如果您在规范测试中看到异常,则应该为 test 环境重新创建db,如下所示:


RAILS_ENV=test rake db:drop db:create db:migrate


在大多数情况下,测试数据库是在测试过程中播种的,因此db:seed任务操作不需要传递。否则,您应该准备数据库:


rake db:test:prepare


要么


RAILS_ENV=test rake db:seed


此外,要使用重新创建任务,您可以在 Rakefile 中添加以下代码:


namespace :db do
   task :recreate => [ :drop, :create, :migrate ] do
      if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
         Rake::Task[ 'db:seed' ].invoke
      end
   end
end


然后发出:


rake db:recreate

其它参考6


从命令行运行


rake db:migrate:reset

其它参考7


使用像


rake db:drop db:create db:migrate db:seed


全部在一条线上。这更快,因为环境不会一次又一次地重新加载。


db:drop - 将删除数据库。


db:create - 将创建数据库(主机/数据库/密码将从config/database.yml获取)


db:migrate - 将从目录(db/migration/ .rb)*运行现有迁移。


db:seed - 将从目录(db/migration/seed.rb)运行种子数据。


我通常喜欢:


rake db:reset


一次做所有事。


干杯!

其它参考8


你可以手动做:


rake db:drop
rake db:create
rake db:migrate


或者只是rake db:reset,它将运行上述步骤,但也会运行db/seeds.rb文件。


另一个细微差别是rake db:reset直接从schema.rb文件加载,而不是再次运行所有迁移文件。


在所有情况下,您的数据都会被吹走。

其它参考9


您可以使用以下命令行:


rake db:drop db:create db:migrate db:seed db:test:clone

其它参考10


要删除特定数据库,可以在rails控制台上执行此操作:


$rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit


然后再次迁移DB


$bundle exec rake db:migrate 

其它参考11


在rails 4.2上,删除所有数据但保留数据库


$ bin/rake db:purge && bin/rake db:schema:load


https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md[47]

其它参考12


您可以使用
db:reset - 用于运行db:drop和db:setup或
db:migrate:reset - 运行db:drop,db:create和db:migrate。


依赖于你想要使用exists schema.rb

其它参考13


根据Rails指南,应使用这一个班轮,因为它将从schema.rb加载,而不是逐个重新加载迁移文件:[48]


rake db:reset

其它参考14


因为在开发过程中,您总是希望重新创建数据库,您可以在lib/tasks文件夹中定义rake任务。


  namespace :db do
      task :all => [:environment, :drop, :create, :migrate] do
   end 
end


在终端你会跑


rake db:all


它将重建您的数据库

其它参考15


我认为运行此命令的最佳方法是:


**rake db:reset** it does db:drop, db:setup
 rake db:setup does db:create, db:schema:load, db:seed

其它参考16


只需你可以跑


rake db:setup


如果您使用某些数据创建种子文件,它将删除数据库,创建新数据库并从种子填充数据库。

其它参考17


我今天对我的rails架构做了很多改动。我意识到我需要在层次结构中另外两个模型以及其他一些要删除的模型。模型和控制器需要进行许多小的更改。


我添加了两个新模型并使用以下方法创建它们:


rake db:migrate


然后我编辑了schema.rb文件。我手动删除了不再需要的旧模型,根据需要更改了外键字段,只是对它进行了重新排序以使其更清晰。我 已删除 所有迁移,然后通过以下方式重新运行构建:


rake db:reset


它工作得很好。当然,所有数据都必须重新加载。 Rails意识到迁移已被删除并重置高水位标记:


-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])