我有一个充满数据的Ruby on Rails开发数据库。我想删除所有东西,重建数据库。我正在考虑使用类似的东西:
rake db:recreate
这可能吗?
我有一个充满数据的Ruby on Rails开发数据库。我想删除所有东西,重建数据库。我正在考虑使用类似的东西:
rake db:recreate
这可能吗?
当前回答
您可以手动执行:
rake db:drop
rake db:create
rake db:migrate
或者只是rake db:reset,它将运行上述步骤,但也将运行您的db/seeds。rb文件。
一个额外的细微差别是rake db:reset直接从您的模式加载。Rb文件,而不是再次运行所有的迁移文件。
你的数据在任何情况下都会消失。
其他回答
更新:在Rails 5中,这个命令可以通过以下命令访问:
rails db:清除db:创建db:迁移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
要删除一个特定的数据库,你可以在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
我在Terminal中使用了以下一行。
$ 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+
今天我对rails模式做了一些更改。我意识到我需要在一个层次结构中增加两个模型,并删除其他一些模型。需要对模型和控制器进行许多小的更改。
我添加了两个新模型并创建了它们,使用:
rake db:migrate
然后我编辑模式。rb文件。我手动删除了不再需要的旧模型,根据需要更改外键字段,只是重新排序了一下,让它对我来说更清楚。我删除了所有的迁移,然后通过以下方式重新运行构建:
rake db:reset
它工作得很完美。当然,所有的数据都必须重新加载。Rails意识到迁移已经被删除,并重置了高水位标记:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
在Rails 4中,所需要的是
$ rake db:schema:load
这将删除您的DB上的全部内容,并根据您的模式重新创建模式。Rb文件,而不必逐一应用所有迁移。