rake db:create和rake db:migrate idempotent?

时间:2013-07-23 16:25:42

标签: ruby-on-rails rake rails-migrations

我是Rails的新手,我正试图找出rake db:createrake db:migrate是否是幂等的。

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

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

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

1 个答案:

答案 0 :(得分:9)

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

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

rake db:setup

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

db:create
db:schema:load
db:seed

注意db:setup无法运行db:migrate,而只是运行db:schema:load。只有在将现有数据库升级到较新版本时才需要迁移,因为它们描述了两个版本的模式之间的差异。但是,当您完全设置新数据库时,可以跳过整个迁移历史记录并跳转到最新的模式状态,即使用db:schema:load加载当前模式。 db:seed运行您的db/seeds.rb文件,用于创建初始数据(如果与您的应用程序相关)。

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