【问题标题】:add new column to table push to heroku将新列添加到表推送到heroku
【发布时间】:2014-02-02 13:47:07
【问题描述】:

继我之前的帖子 (carrierwave image not loading into source code) 之后,我在我的表投资组合中添加了一个新列 (feature_image)。

我想将它推送到我的 Heroku 应用程序,但是我已经在网站上有许多我不想丢失的投资组合条目。

我是否可以在不丢失已有内容的情况下推送我的数据库更改?

谢谢!

【问题讨论】:

  • 推送它不会影响您的记录,只会运行新的迁移以添加新列,因此您最终会拥有大量没有图像的投资组合

标签: ruby-on-rails-3 postgresql heroku ruby-on-rails-4


【解决方案1】:

推送它不会影响您的记录(除非您有一些特殊代码可以在每次推送时重置数据库 - 从未听说过这种情况,但谁知道),只有新的迁移会执行以添加新列,因此您最终将拥有大量没有图像的投资组合。

rails 应用程序将所有migrations 数字保存到db 中的schema_migration 表中,因此下次运行migration 时,它将仅迁移不在schema_migration 中的数字。

在我的情况下,如果我只运行迁移,20140109214830_add_is_new_to_messages 将被迁移,因为它的编号不是schema_migration,它在本地机器上以这种方式工作,在推送时也是如此。

迁移后,迁移号会保存到schema_migration表中(第44行):

git push heroku master && heroku run rake db:migrate && heroku restart

【讨论】:

  • 所以如果我有 20140114071826_add_feature_image_to_portfolios,我要不要执行 heroku run rake --trace db:migrate VERSION=0140114071826? @rmagnum2002
  • 您需要跟踪吗?我认为heroku run rake db:migrate 应该足够了,除非您要迁移特定的迁移编号,否则无需指定迁移编号,例如您有编号为 1、2、3、4 的迁移并且您想迁移编号为 3,在这种情况下您指定迁移编号..在您的情况下,您正在为不在schema_migration中的所有内容运行迁移...所以heroku run rake db:migrate是您需要的..它将跳过现有的,并且只会迁移新的
  • 您可能还需要先将更改推送到heroku,然后再运行迁移...类似git push heroku master && heroku run rake db:migrate 一行。
  • 是的,我先推送,然后迁移。嗯,收到“我们很抱歉,但出了点问题”。检查了我的本地版本 - 可以添加一个新的投资组合/编辑现有的投资组合以包含一个特征图像很好,rake 测试很好。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2014-02-13
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2014-03-21
相关资源
最近更新 更多