AnA*_*ice 571 rake ruby-on-rails ruby-on-rails-3
我有一个充满数据的开发Ruby on Rails数据库.我想删除所有内容并重建数据库.我正在考虑使用类似的东西:
rake db:recreate
Run Code Online (Sandbox Code Playgroud)
这可能吗?
the*_*gah 1050
我知道有两种方法可以做到这一点:
这将重置您的数据库并使用all重新加载当前架构:
rake db:reset db:migrate
Run Code Online (Sandbox Code Playgroud)
这将破坏您的数据库,然后创建它,然后迁移您当前的模式:
rake db:drop db:create db:migrate
Run Code Online (Sandbox Code Playgroud)
两种情况下都会丢失所有数据.
Ene*_*nso 156
在Rails 4上,所有需要的都是
$ rake db:schema:load
Run Code Online (Sandbox Code Playgroud)
这将删除数据库上的全部内容,并从schema.rb文件重新创建模式,而无需逐个应用所有迁移.
TK.*_*TK. 44
我在终端使用以下一个班轮.
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
我把它作为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+
Run Code Online (Sandbox Code Playgroud)
Rob*_*yle 37
更新:随着Rails 5的出现,可以通过以下命令访问此命令:
rails db:purge db:create db:migrate RAILS_ENV = test
从最新的rails 4.2版本开始,您现在可以运行:
rake db:purge
Run Code Online (Sandbox Code Playgroud)
来源:提交
# 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
Run Code Online (Sandbox Code Playgroud)
它可以像上面提到的一起使用:
rake db:purge db:create db:migrate RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
cor*_*ard 29
根据您的需要,您可以使用......
rake db:create
...从头开始构建数据库config/database.yml,或者......
rake db:schema:load
...从头开始从您的schema.rb文件构建数据库.
小智 11
从命令行运行
rake db:migrate:reset
Run Code Online (Sandbox Code Playgroud)
Мал*_*евъ 11
只需发出以下步骤:删除数据库,然后重新创建数据库,迁移数据,如果有种子,则播种数据库:
rake db:drop db:create db:migrate db:seed
Run Code Online (Sandbox Code Playgroud)
由于默认环境rake是开发,如果您在规范测试中看到异常,则应该为测试环境重新创建db,如下所示:
RAILS_ENV=test rake db:drop db:create db:migrate
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,测试数据库在测试过程中被播种,因此db:seed不需要传递任务操作.否则,您应该准备数据库:
rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
要么
RAILS_ENV=test rake db:seed
Run Code Online (Sandbox Code Playgroud)
此外,要使用重新创建任务,您可以将以下代码添加到Rakefile中:
namespace :db do
task :recreate => [ :drop, :create, :migrate ] do
if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
Rake::Task[ 'db:seed' ].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后发出:
rake db:recreate
Run Code Online (Sandbox Code Playgroud)
Man*_*ava 11
用得像
rake db:drop db:create db:migrate db:seed
Run Code Online (Sandbox Code Playgroud)
全部在一条线上.这更快,因为环境不会一次又一次地重新加载.
db:drop - 将丢弃数据库.
db:create - 将创建数据库(host/db/password将取自config/database.yml)
db:migrate - 将从目录(db/migration / .rb)*运行现有迁移.
db:seed - 将从目录(db/migration/seed.rb)运行种子数据.
我通常喜欢:
rake db:reset
Run Code Online (Sandbox Code Playgroud)
一次做所有.
干杯!
你可以手动做:
rake db:drop
rake db:create
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
或者只是rake db:reset,它将运行上述步骤,但也将运行您的db/seeds.rb文件.
增加的细微差别是rake db:reset直接从您的schema.rb文件加载,而不是再次运行所有迁移文件.
在所有情况下,您的数据都会被吹走.
小智 6
您可以使用以下命令行:
rake db:drop db:create db:migrate db:seed db:test:clone
Run Code Online (Sandbox Code Playgroud)
在 Rails 6 中,有一种方便的方法可以重置 DB 并再次播种:
rails db:seed:replant # Truncates tables of each database for current environment and loads the seeds
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
330421 次 |
| 最近记录: |