每次对架构或新迁移文件进行更改时,我都会运行以下命令:
rake db:drop db:create db:migrate db:seed
是否有预先构建的等效方法来执行此操作?
我从我所读到的内容中认为rake db:reset
这并不完全一样,但我可能是错的。
每次对架构或新迁移文件进行更改时,我都会运行以下命令:
rake db:drop db:create db:migrate db:seed
是否有预先构建的等效方法来执行此操作?
我从我所读到的内容中认为rake db:reset
这并不完全一样,但我可能是错的。
您可以为此创建一个自定义 rake 任务 - lib/tasks/db_rebuild_all.rake
namespace :db_tasks do
desc "Rebuild database"
task :rebuild, [] => :environment do
raise "Not allowed to run on production" if Rails.env.production?
Rake::Task['db:drop'].execute
Rake::Task['db:create'].execute
Rake::Task['db:migrate'].execute
Rake::Task['db:seed'].execute
end
end
然后运行bundle exec rake db_tasks:rebuild
- 运行
rake db:reset && rake db:seed
(注意:您必须更新 db/schema.rb 文件)
或- 跑
rake db:migrate:reset && rake db:seed
你可以运行rake db:drop
然后rake db:setup
。
db:setup
会跑rake db:create db:schema:load and db:seed
但是,为什么每次进行新迁移时都要删除并重新创建数据库?这就是迁移的目的,对现有数据库进行增量更改。
首先使用以下命令创建任务文件 (lib/tasks/db.rake):
rails g task db reseed
然后在里面写:
namespace :db do
desc "Reseed database task"
task reseed: [ 'db:drop', 'db:create', 'db:migrate', 'db:seed' ] do
puts 'Reseeding completed.'
end
end
从 Rails 6 开始,您可以运行rake db:prepare
创建数据库、运行迁移和种子
如果要完全重置数据库,请运行rake db:drop && rake db:prepare
https://guides.rubyonrails.org/v6.0/6_0_release_notes.html#active-record-notable-changes