Gau*_*wal 593 ruby database rake ruby-on-rails
我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)并在新数据库上运行迁移.如果我的理解出错了,请帮助澄清一下.
mor*_*itz 1254
db:schema:load在schema.rb之后的(现有)数据库中创建表和列
db:setup确实db:create,db:schema:load,db:seed
通常,在通过新的迁移文件对架构进行更改后,您将使用db:migrate(仅当数据库中已存在数据时才有意义).db:schema:在设置应用程序的新实例时使用load.
我希望有所帮助.
更新rails 3.2.12:
我刚检查了源代码,依赖关系现在是这样的:
db:schema:dump转储当前的env架构(并且似乎也创建了db)
db:setup运行db:schema:load,db:seed
欲了解更多信息,请看看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)
sud*_*ang 22
使用
rake db:migrate 如果您想对架构进行更改 rake db:reset如果要删除数据库,请从中重新加载模式schema.rb,然后重新设置数据库rake db:schema:load如果您想将数据库重置为架构,如下所示schema.rb(这将删除所有数据)rake db:schema:load将设置schema.rb文件中提供的架构.这对于全新安装app非常有用,因为它不需要花费太多时间db:migrate
重要提示,
db:schema:load将删除服务器上的数据.
rake db:migrate对现有架构进行更改.它就像创建架构版本一样.db:migrate将查找db/migrate/任何ruby文件,并执行从最旧的文件开始尚未运行的迁移.通过查看迁移文件名开头的时间戳,Rails知道哪个文件是最旧的.db:migrate有一个好处,数据也可以放在数据库中.这实际上不是一个好习惯.它更适合用于rake db:seed添加数据.
rake db:migrate提供up,down等任务,使命令rake db:rollback能够成为最有用的命令.
rake db:reset做a db:drop和db:setup
它删除数据库,再次创建它,加载模式,并使用种子数据初始化
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
Run Code Online (Sandbox Code Playgroud)
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
小智 14
db:create- 为当前RAILS_ENV环境创建数据库。如果未指定RAILS_ENV,则默认为开发和测试数据库。
db:create:all- 为所有环境创建数据库。
db:drop- 删除当前RAILS_ENV环境的数据库。如果未指定RAILS_ENV,则默认为开发和测试数据库。
db:drop:all- 删除所有环境的数据库。
db:migrate- 为当前环境运行尚未运行的迁移。默认情况下,它将仅在开发环境中运行迁移。
db:migrate:redo-根据指定的迁移运行db:migrate:down和db:migrate:up或db:migrate:rollback和db:migrate:up 。
db:migrate:up- 运行给定迁移版本的 up。
db:migrate:down- 运行给定迁移版本的down。
db:migrate:status- 显示当前迁移状态。
db:migrate:rollback- 回滚上次迁移。
db:version- 打印当前架构版本。
db:forward- 将架构推送到下一个版本。
db:seed- 运行db/seeds.rb文件。
db:schema:load从schema.rb文件重新创建数据库。删除现有数据。
db:schema:dump将当前环境\xe2\x80\x99s 架构转储到db/schema.rb。
db:structure:load- 从Structure.sql文件重新创建数据库。
db:structure:dump- 将当前环境\xe2\x80\x99s schema 转储到db/struct.sql。\n(您可以使用 指定另一个文件SCHEMA=db/my_structure.sql)
db:setup运行db:create、db:schema:load和db:seed。
db:reset运行db:drop和db:setup。\n db:migrate:reset- 运行db:drop、db:create和db:migrate。
db:test:prepare- 检查挂起的迁移并加载测试模式。(如果你运行 rake 时不带任何参数,它会默认执行此操作。)
db:test:clone- 从当前环境\xe2\x80\x99s 数据库架构重新创建测试数据库。
db:test:clone_structure- 与db:test:clone类似,但它将确保您的测试数据库与当前环境\xe2\x80\x99s 数据库具有相同的结构,包括字符集和排序规则。
db:environment:set-在ar_internal_metadata表中设置当前的RAILS_ENV环境。(用作受保护环境检查的一部分。)
db:check_protected_environments- 检查是否可以在当前RAILS_ENV环境中执行破坏性操作。在运行db:drop或db:schema:load 等破坏性操作时在内部使用。