rake db:migrate和rake db:reset之间的区别对我来说是非常清楚的。我不明白的是,rake db:schema:load与前两者有何不同。
为了确保我在同一页上:
rake db:migrate -运行尚未运行的迁移。rake db:reset -清除数据库(大概是做一个rake db:drop + rake db:create + rake db:migrate),并在一个新的数据库上运行迁移。发布于 2012-04-24 16:48:46
通常,您将在通过新的迁移文件对模式进行更改之后使用db:迁移(这只有在数据库中已经有数据时才有意义)。db:schema:load是在设置应用程序的新实例时使用的。
对于rails 3.2.12:
我刚刚检查了源代码,依赖项现在如下所示:
发布于 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:reset做db:drop和db:setup
它删除数据库,再次创建数据库,加载模式,并使用种子数据进行初始化。
databases.rake命令的相关部分
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 # desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]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发布于 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:down和db:migrate:up或db:migrate:rollback和db: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:load从schema.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:drop和db:setup。db:migrate:reset -运行db:drop,db:create和db: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或)时在内部使用
https://stackoverflow.com/questions/10301794
复制相似问题