清除或重新创build一个Ruby on Rails数据库

我有一个开发Ruby on Rails数据库的完整数据。 我想删除一切,重build数据库。 我正在考虑使用类似于:

rake db:recreate 

这可能吗?

我知道两种方法来做到这一点:

这将重置你的数据库,并重新加载你所有的当前模式:

 rake db:reset db:migrate 

这将破坏你的分贝,然后创build它,然后迁移你当前的模式:

 rake db:drop db:create db:migrate 

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

在Rails 4上,所有需要的是

 $ rake db:schema:load 

这将删除数据库中的全部内容,并从schema.rb文件重新创build模式,而不必逐个应用所有迁移。

我在航站楼使用下列class轮。

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

我把这个作为shell别名,并命名为remigrate

更新:随着Rails 5的出现,这个命令可以通过这个命令来访问:

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


截至最新的rails 4.2版本,你现在可以运行:

 rake db:purge 

来源: 提交

 # 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 

根据你想要什么,你可以使用…

rake db:create

…从头开始构build数据库从config/database.yml ,或…

rake db:schema:load

…从你的schema.rb文件开始构build数据库。

只需发出这些步骤的顺序:删除数据库,然后重新创build它,迁移数据,如果有种子,播种数据库:

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

由于rake的默认环境是开发 ,万一在spectesting中看到exception,您应该重新为testing环境创builddb,如下所示:

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

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

 rake db:test:prepare 

要么

 RAILS_ENV=test rake db:seed 

另外,要使用重新创build任务,您可以在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 

使用像

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

所有在一条线。 这是因为环境不会一次又一次地重新加载。

db:drop – 将删除数据库。

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

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

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

我通常更喜欢:

 rake db:reset 

一次做所有事情

干杯!

从命令行运行

 rake db:migrate:reset 

您可以手动执行:

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

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

增加的细微差别在于rake db:reset直接从你的schema.rb文件中加载,而不是再次运行所有的迁移文件。

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

您可以使用以下命令行:

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

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

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

然后再次迁移数据库

 $bundle exec rake db:migrate 

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

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

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

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

依赖于你想使用存在的schema.rb

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

 rake db:reset 

因为在开发中,你总是想重新创build数据库,所以你可以在你的lib / tasks文件夹中定义一个rake任务。

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

在terminal你会跑

 rake db:all 

它会重build你的数据库

我认为运行这个命令的最好方法是:

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

我今天对我的rails模式进行了一些修改。 我意识到我需要一个层次结构中的另外两个模型,还有一些模型需要删除。 模型和控制器需要很less的改变。

我添加了两个新的模型,并创build它们,使用:

 rake db:migrate 

然后我编辑了schema.rb文件。 我手动删除了不再需要的旧模型,根据需要更改了外键字段,并将其重新sorting以使其更加清晰。 我删除了所有的迁移,然后通过以下方式重新运行构build:

 rake db:reset 

它工作完美。 当然,所有的数据都要重新加载。 Rails意识到迁移已经被删除,重新设置了高水位标记:

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