我有一个充满数据的Ruby on Rails开发数据库。我想删除所有东西,重建数据库。我正在考虑使用类似的东西:
rake db:recreate
这可能吗?
我有一个充满数据的Ruby on Rails开发数据库。我想删除所有东西,重建数据库。我正在考虑使用类似的东西:
rake db:recreate
这可能吗?
当前回答
我认为运行这个命令的最好方法是:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
其他回答
您可以使用以下命令行:
rake db:drop db:create db:migrate db:seed db:test:clone
3个选项,结果相同:
1. 所有的步骤:
$ rake db:drop # deletes the database for the current env
$ rake db:create # creates the database for the current env
$ rake db:schema:load # loads the schema already generated from schema.rb / erases data
$ rake db:seed # seed with initial data
2. 重置:
$ rake db:reset # drop / schema:load / seed
3.迁移:重置:
$ rake db:migrate:reset # drop / create / migrate
$ rake db:seed
注:
如果使用schema:load比执行所有迁移都快,但结果相同。 所有数据都将丢失。 您可以在一行中运行多个耙。 使用rails 3。
只需发布以下步骤:删除数据库,然后重新创建它,迁移数据,如果有种子,则播种数据库:
rake db:drop db:create db:migrate db:seed
由于rake的默认环境是开发环境,如果您在spec测试中看到异常,您应该为测试环境重新创建db,如下所示:
RAILS_ENV=test rake db:drop db:create db:migrate
在大多数情况下,测试数据库在测试过程中被播种,因此db:seed任务操作不需要通过。否则,你必须准备数据库:
rake db:test:prepare
or
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
在Rails 4中,所需要的是
$ rake db:schema:load
这将删除您的DB上的全部内容,并根据您的模式重新创建模式。Rb文件,而不必逐一应用所有迁移。
今天我对rails模式做了一些更改。我意识到我需要在一个层次结构中增加两个模型,并删除其他一些模型。需要对模型和控制器进行许多小的更改。
我添加了两个新模型并创建了它们,使用:
rake db:migrate
然后我编辑模式。rb文件。我手动删除了不再需要的旧模型,根据需要更改外键字段,只是重新排序了一下,让它对我来说更清楚。我删除了所有的迁移,然后通过以下方式重新运行构建:
rake db:reset
它工作得很完美。当然,所有的数据都必须重新加载。Rails意识到迁移已经被删除,并重置了高水位标记:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])