我很清楚rake db:migraterake db:reset之间的区别.我不明白的是rake db:schema:load和前两个有什么不同.

为了确保我的观点一致:

  • rake db:migrate-运行尚未运行的migrations.
  • rake db:reset-清除数据库(可能是rake db:drop+rake db:create+rake db:migrate),并在新数据库上运行migrations.

推荐答案

  • db:migrate次(单个)尚未运行的migrations.

  • db:create创建数据库

  • db:drop删除数据库

  • db:schema:load按照模式在现有数据库中创建表和列.rb.这将删除现有数据.

  • db:setup数据库:创建,数据库:模式:加载,数据库:种子

  • db:reset分贝:下降,分贝:设置

  • db:migrate:reset数据库:删除,数据库:创建,数据库:迁移

通常,您会在通过新的迁移文件对模式进行更改后使用db:migrate(只有在数据库中已有数据时,这才有意义).db:schema:load在安装应用程序的新实例时使用.

我希望这能有所帮助.


rails 3.2.12的更新:

我刚刚判断了源代码,依赖项如下所示:

  • db:create创建数据库 for the current env

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

  • db:drop删除当前环境的数据库

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

  • db:migrate为当前环境运行尚未运行的迁移

  • db:migrate:up运行一个特定的迁移

  • db:migrate:down回滚一个特定的迁移

  • db:migrate:status显示当前的迁移状态

  • db:rollback回滚上一次迁移

  • db:forward将当前模式版本提前到下一个模式版本

  • db:seed(仅限)运行数据库/种子.rb文件

  • db:schema:load将模式加载到当前环境的数据库中

  • db:schema:dump转储当前env的模式(并且似乎也创建了数据库)

  • db:setup次运行db:create 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)

Ruby-on-rails相关问答推荐

Rails 7涡轮框架和多种形式与形式值有关

Rails 7.1解决冲突的Zeitwerk Inflection规则

Rails版本7.1.2:当验证失败且控制器发送422状态时,JS停止工作

我的 Ruby on Rails Web API 的 Docker 映像未在服务器上构建,因为它未与 ruby​​gems.org 连接

Rails HMAC - 使用应用程序机密作为加密密钥

Selenium chromedriver:无法从不可键入的键构造KeyEvent

Ruby 地理定位Ruby /插件

使用 rails 3.1.0 和 ubuntu 安装 Nokogiri 1.5.0 时出错

SQLite3::BusyException

跳过模型中的某些验证方法

Rails: WickedPDF: 分页符

simple_forms 自定义数据属性

更改 form_for rails 3.1 生成的 html 表单 ID

将 Amazon SES 与 Rails ActionMailer 结合使用

如何显示 RSpec 测试生成的 SQL 查询日志(log)?

关闭 Firefox 中文本字段的自动完成功能

如何在 Rails 中测试助手?

rbenv:没有 gemsets 生存

我应该在 Heroku Cedar 上使用薄的还是独角兽

让 bundler 为不同的平台使用不同的 gem