微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 在删除应用程序后,Heroku数据库是否存在 – 我可以将其转移到另一个应用程序吗?

我有一个在Cedar-10堆栈上运行的Heroku应用程序,很快就会被弃用.我正在关注 Migrating to the Celadon Cedar-14 Stack指南,并在新堆栈上创建了我的应用程序实例.但是,这也自动创建了另一个(空的)Postgresql数据库.

>我可以升级到新堆栈但是继续使用现有数据库吗?
>当我删除旧堆栈上的应用程序时,它是否会自动删除与其关联的数据库

我看到数据库URL是在环境变量$DATABASE_URL中设置的 – 这是否意味着我可以以某种方式更新它并将旧数据库链接”到新应用程序?

搜索有关这方面的信息时,我遇到了heroku的pg:copy和pg:transfer指令,但是当它正常工作时复制数据库并且有一个付费的“升级”和已经与之关联的备份似乎很奇怪.

解决方法

配置变量方法的问题

虽然通过将第一个应用程序的DATABASE_URL配置变量复制到第二个应用程序可以在Heroku中使用share a database between two applications,但只有第一个应用程序将具有数据库的主连接(附件).

如果删除一个应用程序,您的数据库将从Heroku的postgres dashboard中消失.虽然看起来第二个应用程序仍然可以使用数据库. (测试于2015-10-25.)

值得注意的是:

Heroku do reserve the right to change database URLs as required. If this occurs,it will cause your secondary connections to fail,and you’ll need to update the URLs accordingly.

这意味着如果Heroku决定更改数据库的URL,您的新应用程序将失败,并且由于数据库现在已从仪表板中消失,因此您将无法在不接近Heroku的情况下检索新URL. (如果有的话.)

这意味着应用程序与其数据库之间存在比仅仅DATABASE_URL更多的内在连接,并且将其用作传输机制可能不是最佳选择.

使用PGBackups的另一种方法

Heroku official documentation建议使用免费的PGBackups附加组件(老实说,你应该总是运行它)来在Postgres实例之间传输数据.该工具使用本机pg_dump和pg_restore工具.

特别是,您可以使用PG copy功能,如下所述:

PG copy uses the native Postgresql backup and restore utilities. Instead of writing the backup to a disk however,it streams it over the wire directly to the restore process on the new database.

它们为您提供了一种方法,您可以使用单个命令在应用程序之间复制数据库,而无需任何中间存储:

As an alternative,you can migrate data between databases that are attached to different applications.

To copy the source database to the target database you will need to invoke pg:copy from the target application,referencing a source database.

例:

heroku pg:copy source-application::OLIVE HEROKU_POSTGREsql_PINK -a target-application

source-application是您现有的堆栈,target-application是您新创建的堆栈.与您无关,但仍然值得一提的是,目标应用程序数据库中的任何现有数据都将被销毁.

在此之后,您可能需要在新应用程序中升级数据库,如下所示:

heroku pg:promote HEROKU_POSTGREsql_PINK

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐