我有一个充满数据的开发Ruby on Rails数据库。我想删除所有内容并重建数据库。我正在考虑使用类似的东西:
rake db:recreate
这可能吗?
答案 0 :(得分:1021)
我知道有两种方法可以做到这一点:
这将重置您的数据库并使用all:
重新加载当前架构rake db:reset db:migrate
这将破坏您的数据库,然后创建它,然后迁移您当前的模式:
rake db:drop db:create db:migrate
两种情况下都会丢失所有数据。
答案 1 :(得分:150)
在Rails 4上,所有需要的是
$ rake db:schema:load
这会删除数据库上的全部内容,并从schema.rb文件重新创建架构,而不必逐个应用所有迁移。
答案 2 :(得分:42)
我在终端使用以下一个班轮。
$ 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 :(得分:33)
更新:在Rails 5中,可以通过以下命令访问此命令:
rails db:purge db:create db:migrate RAILS_ENV=test
从最新的rails 4.2版本开始,您现在可以运行:
rake db:purge
来源:commit
# 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 :(得分:28)
根据您的需要,您可以使用...
rake db:create
...从头开始构建数据库config/database.yml
或......
rake db:schema:load
...从您的schema.rb
文件开始构建数据库。
答案 5 :(得分:11)
只需发布步骤顺序:删除数据库,然后重新创建数据库,迁移数据,如果有种子,则播种数据库:
rake db:drop db:create db:migrate db:seed
由于rake
的默认环境是 development ,如果您在spec测试中看到异常,则应该为 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 :(得分:11)
使用
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
一次完成所有工作。
干杯!
答案 7 :(得分:11)
从命令行运行
rake db:migrate:reset
答案 8 :(得分:8)
您可以手动执行:
rake db:drop
rake db:create
rake db:migrate
或仅rake db:reset
,它将运行上述步骤,但也会运行您的db/seeds.rb
文件。
另一个细微差别是,rake db:reset
直接从schema.rb
文件加载,而不是再次运行所有迁移文件。
在所有情况下,您的数据都会被吹走。
答案 9 :(得分:6)
您可以使用以下命令行:
rake db:drop db:create db:migrate db:seed db:test:clone
答案 10 :(得分:4)
要删除特定数据库,可以在rails console上执行此操作:
$rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit
然后再次迁移数据库
$bundle exec rake db:migrate
答案 11 :(得分:4)
在rails 4.2上,删除所有数据但保留数据库
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
答案 12 :(得分:3)
你可以使用
db:reset
- 用于运行db:drop和db:setup或
db:migrate:reset
- 运行db:drop,db:create和db:migrate。
依赖于你想要使用exists schema.rb
答案 13 :(得分:2)
根据Rails guide,应使用此一个班轮,因为它将从schema.rb
加载,而不是逐个重新加载迁移文件:
rake db:reset
答案 14 :(得分:1)
因为在开发过程中,您总是希望重新创建数据库,您可以在lib / tasks文件夹中定义rake任务。
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
并在终端中运行
rake db:all
它将重建您的数据库
答案 15 :(得分:1)
我认为运行此命令的最佳方法是:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
答案 16 :(得分:1)
只需运行
rake db:setup
如果使用某些数据创建种子文件,它将删除数据库,创建新数据库并从种子中填充db。
答案 17 :(得分:1)
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
注释:
答案 18 :(得分:0)
我今天对我的rails架构做了很多改动。我意识到我需要在层次结构中另外添加两个模型,而另一些模型则需要删除。模型和控制器需要进行许多微小的更改。
我添加了两个新模型并使用以下方法创建了它们:
rake db:migrate
然后我编辑了schema.rb文件。我手动删除了不再需要的旧模型,根据需要更改了外键字段,只是重新排序了一下,让我更清楚。我 已删除 所有迁移,然后通过以下方式重新运行构建:
rake db:reset
完美无缺。当然,所有数据都必须重新加载。 Rails意识到迁移已被删除并重置了高水位标记:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
答案 19 :(得分:0)
在Rails 6中,有一种方便的方法可以重置数据库并再次种植种子:
rails db:seed:replant # Truncates tables of each database for current environment and loads the seeds
答案 20 :(得分:0)
我使用:
.addE('HAS').from('parent')
删除数据库。rails db:drop
基于 rails db:create
前面的命令可以用 config/database.yml
代替。
不要忘记运行 rails db:reset
来运行迁移。