Difference between rake db:migrate db:reset and db:schema:load
只是为了确保我在同一页面上:
-
rake db:migrate - 运行尚未运行的迁移。 -
rake db:reset - 清除数据库(可能是rake db:drop +rake db:create +rake db:migrate )并在新数据库上运行迁移。
如果我的理解出错了,请帮助澄清一下。
- db:migrate运行尚未运行的(单个)迁移。
- db:create创建数据库
- db:drop删除数据库
-
db:schema:load在schema.rb之后的(现有)数据库中创建表和列
-
db:setup确实db:create,db:schema:load,db:seed
- db:reset执行db:drop,db:setup
通常,在通过新的迁移文件对架构进行更改后,您将使用db:migrate(仅当数据库中已存在数据时才有意义)。 db:schema:在设置应用程序的新实例时使用load。
我希望有所帮助。
更新rails 3.2.12:
我刚检查了源代码,依赖关系现在是这样的:
- db:create为当前环境创建数据库
- db:create:all为所有env创建数据库
- db:drop删除当前env的数据库
- db:drop:all删除所有envs的数据库
- db:migrate为尚未运行的当前env运行迁移
- db:migrate:up运行一个特定的迁移
- db:migrate:down回滚一个特定的迁移
- db:migrate:status显示当前的迁移状态
- db:rollback回滚上次迁移
- db:forward将当前架构版本推进到下一个版本
- db:seed(only)运行db / seed.rb文件
- db:schema:load将架构加载到当前env的数据库中
-
db:schema:dump转储当前的env架构(并且似乎也创建了db)
-
db:setup运行db:schema:load,db:seed
- db:reset运行db:drop db:setup
- db:migrate:redo运行(db:migrate:down db:migrate:up)或(db:rollback db:migrate),具体取决于指定的迁移
- db:migrate:reset运行db:drop db:create db:migrate
有关详细信息,请查看https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake(对于Rails 3.2.x)和https:// github .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / databases.rake(对于Rails 4.0.x)
TLDR
使用
-
rake db:migrate 如果您想更改架构 -
rake db:reset 如果要删除数据库,请从schema.rb 重新加载架构,然后重新设置数据库 -
rake db:schema:load 如果您想按照schema.rb 中的规定将数据库重置为架构(这将删除所有数据)
说明
Important note,
db:schema:load will delete data on server.
它删除数据库,再次创建它,加载模式,并使用种子数据进行初始化
来自databases.rake的相关命令部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |
1 2 | # desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.' task :reset => [ 'db:drop', 'db:setup' ] |
1 2 3 4 5 6 7 8 9 10 11 | 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 |
据我了解,它将删除您的数据库并根据您的
您可以简单地查看Active Record Rake任务,因为我认为它们就像在此文件中一样存在。
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
他们做的是你的问题吗?
这取决于它们来自何处,这只是表明它们根据任务而变化的例子。在这里,我们有一个完整的任务文件。
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
有这些任务。
1 2 3 4 | namespace :db do task create: ["db:mysql:build","db:postgresql:build"] task drop: ["db:mysql:drop","db:postgresql:drop"] end |
这可能无法解答您的问题,但可以让您深入了解并查看源代码,尤其是rake文件和任务。由于他们在帮助您使用rails方面做得非常好,因此并不总能很好地记录代码。如果我们知道它应该做什么,我们都可以帮助那里。