4

我是 Rails 的新手,我试图弄清楚是否是幂等的rake db:createrake db:migrate

换句话说,我可以对我的数据库(postgres 或 mysql)重复运行这两个命令而不会导致问题吗?

这个想法是自动化 Rails 部署,并在每次部署 Rails 应用程序时运行这些命令。我想确保它不会以某种方式破坏数据库。

任何其他关于 rake db 迁移幂等性的问题都非常感谢。

4

1 回答 1

10

是的,它们是幂等的,运行这两个命令应该只是让你的数据库“最新”,一旦你运行它们完成,然后再次运行它们应该什么都不做。

但是,设置全新机器的更好方法是使用

rake db:setup

db:setup只需按顺序运行这些任务:

db:create
db:schema:load
db:seed

Noticedb:setup不运行db:migrate,而是简单地运行db:schema:load。仅当您将现有数据库升级到较新版本时才需要迁移,因为它们描述了架构的两个版本之间的差异。但是当你完全建立一个新的数据库时,你可以跳过整个迁移历史并跳转到模式的最新状态,即用db:schema:load. 如果与您的应用程序相关,则db:seed运行您的db/seeds.rb文件以创建初始数据。

运行rake -T详细描述所有 Rails Rake 任务,或者查看 ActiveRecorddatabases.rake源文件直接阅读代码。

于 2013-07-23T17:06:27.320 回答