我有一个在Cedar-10堆栈上运行的Heroku应用程序,它很快就会被废弃。我遵循迁移到青瓷雪松-14烟囱指南,并在新堆栈上创建了我的应用程序实例。但是,这也自动创建了另一个(空) PostgreSQL数据库。
我看到数据库URL是在环境变量$DATABASE_URL中设置的--这是否意味着我可以以某种方式更新它并将旧数据库“链接”到新应用程序?
在搜索有关这方面的信息时,我遇到了heroku的pg:copy和pg:transfer指令,但是当数据库正常工作时复制它似乎很奇怪,并且有一个付费的“升级”和已经与其相关联的备份。
发布于 2015-10-25 11:38:58
配置变量方法的问题
虽然在Heroku中可以通过将第一个应用程序的在两个应用程序之间共享一个数据库配置变量复制到第二个应用程序,但只有第一个应用程序才有到数据库的主连接(附加)。
如果删除第一个应用程序,数据库将从Heroku的邮政仪表板中消失。虽然第二个应用程序似乎仍然能够使用数据库。(2015年测试-10-25.)
还值得注意的是:
Heroku保留根据需要更改数据库URL的权利。如果发生这种情况,它将导致您的次要连接失败,您需要相应地更新URL。
这意味着,如果Heroku决定更改您的数据库的URL,那么您的新应用程序将失败,而且由于数据库现在已从仪表板上消失,您将无法在不接近Heroku的情况下检索新的URL。(如果有的话)
这意味着应用程序与其数据库之间存在着比DATABASE_URL更多的内在联系,使用它作为一种传输机制可能不是最好的方法。
使用PGBackups的另一种方法
Heroku 正式文件建议在Postgres实例之间使用免费的PGBackups外接程序(老实说,您应该始终运行它)来传输数据。该工具使用本机pg_dump和pg_restore工具。
特别是,您可以使用PG拷贝特性,如下所述:
PG副本使用本机PostgreSQL备份和还原实用程序。但是,它没有将备份写入磁盘,而是将备份通过导线直接流到新数据库上的还原进程。
它们方便地为您提供了一种方法,可以使用单个命令在应用程序之间复制数据库,并且不需要任何中间存储:
作为另一种选择,您可以在附加到不同应用程序的数据库之间迁移数据。 要将源数据库复制到目标数据库,需要从目标应用程序调用pg:copy,并引用源数据库。
示例:
heroku pg:copy source-application::OLIVE HEROKU_POSTGRESQL_PINK -a target-application其中source-application是您现有的堆栈,而target-application是您新创建的堆栈。与您无关,但值得一提的是,target-application数据库中的任何现有数据都将被销毁。
之后,您可能需要在新应用程序中提升数据库,如下所示:
heroku pg:promote HEROKU_POSTGRESQL_PINK发布于 2015-10-21 16:38:34
当然,您可以将配置变量更改为从新应用程序的数据库指向现有数据库。我以前已经这样做了,没有问题(只是确保您有一个新的备份)。
所以在你的新应用程序中运行heroku config。您将在DATABASE_URL中看到对数据库的引用。然后,可以用以下方法更改该值:
heroku config:set DATABASE_URL=<existing-database-url>到那时,您就可以让您的旧应用程序和新应用程序毫无问题地指向同一个数据库。正如您所说,您正在支付现有数据库上的数据库升级费用,因此删除旧应用程序不应该删除数据库;如果是这样的话(再次备份,对吗?)那就是和Heroku联系的时候了!
如果您不习惯使用命令行,也可以在Heroku应用程序仪表板上的设置选项卡中更改值。
尽管如此,你实际上不需要创建一个新的应用程序来升级你的堆栈。同样,我以前做过堆栈升级,您应该能够在适当的地方完成;哪个Heroku医生确认。
发布于 2015-10-25 11:54:11
尽管@Drenmi的方法可能是最安全的选择,但在应用程序之间转移数据库“所有权”是可能的。确保你先做后援。
在Heroku中,数据库被视为Add。因此,例如,当您推送rails应用程序时,heroku将向应用程序添加postgres db插件。
首先使用heroku addons获取附加的加载项列表:
$ heroku addons --app old_app
Add-on Plan Price
─────────────────────────────────────── ──── ─────
heroku-postgresql (resting-fairly-4672) dev free
└─ as HEROKU_POSTGRESQL_CYAN 然后我们可以将数据库附加到新的应用程序中。
heroku addons:attach resting-fairly-4672 --app new_app把它从旧的应用程序中分离出来。
heroku addons:detach resting-fairly-4672 -app old_apphttps://stackoverflow.com/questions/33154282
复制相似问题