Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 编写此rake命令的更快方法-rake db:drop db:create db:migrate db:seed_Ruby On Rails_Ruby On Rails 3_Rake - Fatal编程技术网

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

  • 运行
    rake db:reset&&rake db:seed
    (注意:必须更新db/schema.rb文件)

  • 运行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