我是Rails的新手,我正试图找出rake db:create
和rake db:migrate
是否是幂等的。
换句话说,我可以反复对我的DB(postgres或mysql)运行这两个命令而不会导致问题吗?
我们的想法是自动化Rails部署,并在每次部署Rails应用程序时运行这些命令。我想确保它不会以某种方式弄乱数据库。
关于rake db迁移的幂等性的任何其他问题都非常受欢迎。
答案 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
源文件以直接读取代码。