Ruby on rails 编写此rake命令的更快方法-rake db:drop db:create db:migrate db:seed
每次对架构或新迁移文件进行更改时,我都会运行以下命令:Ruby on rails 编写此rake命令的更快方法-rake db:drop db:create db:migrate db:seed,ruby-on-rails,ruby-on-rails-3,rake,Ruby On Rails,Ruby On Rails 3,Rake,每次对架构或新迁移文件进行更改时,我都会运行以下命令: rake db:drop db:create db:migrate db:seed 有没有一种预构建的等效方法可以做到这一点 从我读到的内容来看,rake db:reset做的事情并不完全相同,但我可能错了。您可以运行rake db:drop,然后运行rake db:setup db:setup将运行rake db:create db:schema:load和db:seed 但为什么每次进行新迁移时都要删除并重新创建数据库?这就是迁移的目
rake db:drop db:create db:migrate db:seed
有没有一种预构建的等效方法可以做到这一点
从我读到的内容来看,
rake db:reset
做的事情并不完全相同,但我可能错了。您可以运行rake db:drop
,然后运行rake db:setup
db:setup
将运行rake db:create db:schema:load和db:seed
但为什么每次进行新迁移时都要删除并重新创建数据库?这就是迁移的目的,对现有数据库进行增量更改。您可以为此创建一个自定义rake任务-lib/tasks/db\u rebuild\u 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
- 运行
(注意:必须更新db/schema.rb文件)rake db:reset&&rake db:seed
或 - 运行rake db:migrate:reset&&rake db:seed
首先使用以下命令创建任务文件(lib/tasks/db.rake): 然后写上:
namespace :db do
desc "Reseed database task"
task reseed: [ 'db:drop', 'db:create', 'db:migrate', 'db:seed' ] do
puts 'Reseeding completed.'
end
end
每次添加迁移时都这样做太过分了。只要
db:migrate
就足够了。db:migrate不运行种子。新的迁移不需要运行种子。只有对种子的更改才需要运行种子。是的,但我正在寻找一个包罗万象的方法。这个项目有多个开发人员,每次我进行更新时,我都会重新创建数据库,以及所有的迁移、种子等。另外,如果种子更新,我必须清除数据库,这样我就不会有重复的种子。我会删除并重新创建,因为如果我更改了迁移,如果已经运行,它不会重新运行。db:setup是否确实运行迁移?db:setup将加载schema.rb文件中的任何内容,如果我没有记错的话,该文件会在每次运行迁移时更新。但这里的问题是,已经存在的种子,现在重新创建DUP,这样我们就有了DUP。在部署现有迁移之后,您不应该更改它们。添加一个新的迁移。我想我可以这样做,但如果我要编写一个函数来实现这一点,我只需要创建一个更简单的unix别名。别名可以工作,但如果你将它添加到你的应用程序中,那么所有开发人员都可以访问它;将来,您可以添加步骤,从已清理的生产备份等生成db。。。
namespace :db do
desc "Reseed database task"
task reseed: [ 'db:drop', 'db:create', 'db:migrate', 'db:seed' ] do
puts 'Reseeding completed.'
end
end