在表中添加新列并将其推送到Heroku。

4

继我之前的帖子(carrierwave image not loading into source code)后,我已经在我的作品表添加了一个新列(feature_image)。

我想将这个更改推送到我的Heroku应用程序中,但是我已经在网站上有许多作品条目,我不想失去它们。

有没有办法在不丢失已有内容的情况下推送数据库更改?

谢谢!


推送它不会影响您的记录,只会运行新的迁移以添加新列,因此您最终将拥有许多没有图像的投资组合。 - rmagnum2002
1个回答

2
推送它不会影响您的记录(除非您有一些特殊代码,在每次推送时重置db - 从未听说过这样的情况,但谁知道),只会执行新迁移以添加新列,因此您最终将拥有许多没有图像的投资组合。
Rails应用程序将所有迁移号保存到schema_migration表中的db中,因此下次运行迁移时,它将仅迁移不在schema_migration中的那些。
在我的情况下,如果我只运行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 - Luchia Bloomfield
你需要跟踪吗?我认为 heroku run rake db:migrate 应该足够了,除非你想迁移特定的迁移文件,例如你有编号为 1、2、3、4 的迁移文件,而你想迁移编号为 3 的迁移文件,在这种情况下,你需要指定迁移号。在你的情况下,你正在运行不在 schema_migration 中的所有迁移... 所以 heroku run rake db:migrate 就是你需要的... 它会跳过现有的迁移文件,只会迁移新的迁移文件。 - rmagnum2002
你可能需要先将更改推送到Heroku,然后再运行迁移...类似于在一行中执行git push heroku master && heroku run rake db:migrate - rmagnum2002
是的,我先进行了推送(push),然后是迁移(migrate)。嗯,出现了“We're sorry, but something went wrong.”(抱歉,发生了一些错误)的提示。检查了我的本地版本——可以很好地添加新的投资组合/编辑现有的投资组合以包括特色图片,rake测试也没有问题。您有什么想法吗? - Luchia Bloomfield
加入这个聊天室:http://chat.stackoverflow.com/rooms/45200/http-stackoverflow-com-questions-21114592-add-new-column-to-table-push-to-herok - rmagnum2002
这是 pastebin 链接 - 我还没有足够的声望在聊天中发言。 http://pastebin.com/DVDyNqgb - Luchia Bloomfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接