首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rake db:migrate db:reset和db:schema:load之间的区别

rake db:migrate db:reset和db:schema:load之间的区别
EN

Stack Overflow用户
提问于 2012-04-24 16:11:32
回答 6查看 414.9K关注 0票数 706

rake db:migraterake db:reset之间的区别对我来说是非常清楚的。我不明白的是,rake db:schema:load与前两者有何不同。

为了确保我在同一页上:

  • rake db:migrate -运行尚未运行的迁移。
  • rake db:reset -清除数据库(大概是做一个rake db:drop + rake db:create + rake db:migrate),并在一个新的数据库上运行迁移。
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-24 16:48:46

  • db:迁移运行(单个)尚未运行的迁移。
  • db:创建创建数据库
  • db:删除删除数据库
  • db:schema:load按照schema.rb在现有数据库中创建表和列。这将删除现有数据。
  • db:做db:create,db:schema:load,db:seed
  • db:重置做db:drop,db:setup
  • db:migrate:reset做db:drop,db:create,db:migrate

通常,您将在通过新的迁移文件对模式进行更改之后使用db:迁移(这只有在数据库中已经有数据时才有意义)。db:schema:load是在设置应用程序的新实例时使用的。

对于rails 3.2.12:

我刚刚检查了源代码,依赖项现在如下所示:

  • db:创建为当前env创建数据库
  • db:create:all为所有env创建数据库。
  • db:删除删除当前env的数据库
  • db:drop:所有删除所有env的数据库
  • db:对尚未运行的当前env运行迁移。
  • db:migrate:up运行一个特定的迁移
  • db:migrate:down回滚一个特定的迁移
  • db:migrate:status显示当前迁移状态
  • db:回滚回滚上一次迁移
  • db:转发将当前模式版本提升到下一个版本
  • db:(仅)运行db/seed.rb文件
  • db:schema:load将架构加载到当前env的数据库中
  • db:schema:dump转储当前env的架构(并且似乎也创建了db )
  • db:运行db:create :schema:load db:seed
  • db:重置运行db:drop db:setup
  • 根据指定的迁移,db:migrate:redo运行(db:migrate:down db:migrate:up)或(db:rollback db:migrate)
  • db:migrate:reset运行db:drop :create:migrate

有关更多信息,请查看记录/铁路/数据库 ( Rails 3.2.x)和记录/铁路/数据库 ( Rails 4.0.x)

票数 1.5K
EN

Stack Overflow用户

发布于 2016-04-07 07:12:54

TLDR

使用

  • 如果要对架构进行更改,请使用rake db:migrate
  • rake db:reset如果您想要删除数据库,从schema.rb重新加载模式,然后重新启动数据库
  • rake db:schema:load如果您想将数据库重置为schema.rb中提供的模式(这将删除所有数据)

解释

rake db:schema:load将设置schema.rb文件中提供的模式。这对于重新安装应用程序很有用,因为它不需要像db:migrate那样花那么多时间

请注意,db:schema:load删除服务器上的数据。

rake db:migrate对现有模式进行更改。这就像创建模式的版本一样。db:migrate将在db/migrate/中查找任何ruby文件,并执行尚未运行的迁移,从最老的迁移开始。通过查看迁移文件名开头的时间戳,Rails知道哪个文件是最早的。db:migrate带来的好处是数据也可以放在数据库中。这实际上不是一个好做法。最好使用rake db:seed来添加数据。

rake db:migrate提供任务向上向下等,它支持rake db:rollback等命令,并使其成为最有用的命令。

rake db:resetdb:dropdb:setup

它删除数据库,再次创建数据库,加载模式,并使用种子数据进行初始化。

databases.rake命令的相关部分

代码语言:javascript
复制
namespace :schema do
  desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
  task :dump => [:environment, :load_config] do
    require 'active_record/schema_dumper'
    filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
    File.open(filename, "w:utf-8") do |file|
      ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
    end
    db_namespace['schema:dump'].reenable
  end

  desc 'Loads a schema.rb file into the database'
  task :load => [:environment, :load_config, :check_protected_environments] do
    ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
  end
代码语言:javascript
复制
  # desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
  task :reset => [ 'db:drop', 'db:setup' ]
代码语言:javascript
复制
namespace :migrate do
  # desc  'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
  task :redo => [:environment, :load_config] do
    if ENV['VERSION']
      db_namespace['migrate:down'].invoke
      db_namespace['migrate:up'].invoke
    else
      db_namespace['rollback'].invoke
      db_namespace['migrate'].invoke
    end
  end
票数 26
EN

Stack Overflow用户

发布于 2020-05-04 08:05:06

Rails 5

db:create -为当前的RAILS_ENV环境创建数据库。如果未指定RAILS_ENV,则默认为开发和测试数据库。

db:create:all -为所有环境创建数据库。

db:drop -删除当前RAILS_ENV环境的数据库。如果未指定RAILS_ENV,则默认为开发和测试数据库。

db:drop:all -删除所有环境的数据库。

db:migrate --为尚未运行的当前环境运行迁移。默认情况下,它只在开发环境中运行迁移。

运行db:migrate:downdb:migrate:updb:migrate:rollbackdb:migrate:up,这取决于指定的迁移。

db:migrate:up -为给定的迁移版本运行up。

db:migrate:down -为给定的迁移版本运行for。

db:migrate:status -显示当前迁移状态。

db:migrate:rollback -回滚最后一次迁移。

db:version -打印当前架构版本。

db:forward -将模式推送到下一个版本。

db:seed -运行db/seeds.rb文件。

db:schema:loadschema.rb文件重新创建数据库。删除现有数据.

db/schema.rb.将当前环境的架构转储到db:schema:dump

structure.sql -从db:structure:load文件重新创建数据库。

将当前环境的架构转储到db/structure.sql.(您可以使用SCHEMA=db/my_structure.sql指定另一个文件)

db:schema:load运行db:create,和db:seed

db:reset运行db:dropdb:setupdb:migrate:reset -运行db:dropdb:createdb:migrate

db:test:prepare -检查挂起的迁移并加载测试模式。(如果您运行rake而没有任何参数,默认情况下它将这样做。)

db:test:clone -从当前环境的数据库架构重新创建测试数据库。

db:test:clone,-类似于db:test:clone_structure,但它将确保您的测试数据库与当前环境的数据库具有相同的结构,包括字符集和排序规则。

ar_internal_metadata表中的当前RAILS_ENV环境。(用作受保护环境检查的一部分。)

db:check_protected_environments -检查是否可以在当前的RAILS_ENV环境中执行破坏性操作。在运行破坏性操作(如db:schema:load. db:drop或)时在内部使用

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10301794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档