几个月前我在heroku cedar堆栈上意外删除了我的生产数据库。我尝试通过heroku run rake db:migrate
重新创建数据库,但是我的迁移出了问题,但是失败了。然后我安装了水龙头并做了一个heroku db:push
,所有这一切都与世界相符。
我现在可以在运行本地迁移后使用heroku run rake db:migrate
来更新生产数据库,还是我永远与点击和heroku db:push
绑定?
提出这个问题或许是一种更好的方式:heroku run rake db:migrate
会进行所有迁移(可能会失败),还是只会经历自上次heroku db:push
以来发生的迁移?< / p>
答案 0 :(得分:0)
查看数据库中的schema_migrations
表。这是Rails用于确定要运行的迁移的内容。它有一个列,其中包含Rails已应用于您的应用程序的每个迁移版本。例如,我在db/migrate
中有以下文件:
20110415064108_create_users.rb
20110415064108
在我的schema_migrations
表格中列为一行。自上次运行db/migrate
以来存在的rake db:migrate
中的每个其他迁移文件也是如此。
假设点击(我对此一无所知)将此schema_migraions
表格全部推送到制作中,您应该能够创建新的迁移并使用rake db:migrate
运行它们在生产中没有问题(只会应用那些新创建的迁移,因为他们的版本#s是生产schema_migrations
表中唯一缺少的版本)。