如何将数据库附加到 Heroku 中的应用程序?

Posted

技术标签:

【中文标题】如何将数据库附加到 Heroku 中的应用程序?【英文标题】:How can I attach a database to an app in Heroku? 【发布时间】:2012-07-26 21:17:58 【问题描述】:

我正在使用 Heroku 的 Postgres 插件,并从 Heroku Postgres 插件页面创建了一个新的生产数据库。 我没有使用我的应用程序的资源页面将其直接添加到我的应用程序中。

现在我想将此数据库附加到我的应用程序,以便 heroku pg 命令能够识别它。

在设置我的应用程序的 DATABASE_URL 配置变量指向它之后,我可以使用数据库 btw,但是 heroku pg 命令还不能识别它.

附加信息:以前的数据库是共享的,新的数据库是生产的。

【问题讨论】:

【参考方案1】:

您是否使用独立于应用程序的https://postgres.heroku.com/ 站点添加了数据库?还是您只是在 Heroku 控制面板中创建了一个 postgresql 数据库?

如果您在https://postgres.heroku.com/ 上创建数据库,您将不会通过heroku pg:info 命令看到数据库。但是,将数据库添加到应用程序中的方法是:

    登录https://postgres.heroku.com/。 单击要附加到应用程序的数据库。 在“连接设置”下,点击右上角的配置按钮。 然后点击“URL”选项。 复制您的数据库 URL,这应该类似于“postgres://blah:blah@ec2-23-23-122-88.compute-1.amazonaws.com:5432/omg”。 在您的应用程序中,在命令行上运行heroku config:set DATABASE_URL=postgres://blah:blah@ec2-23-23-122-88.compute-1.amazonaws.com:5432/omg

我们在那里所做的是将您的数据库分配给应用程序中的DATABASE_URL 环境变量。这是您在本地为应用程序提供数据库时默认使用的变量,因此理论上,分配此值对您来说应该很好。

【讨论】:

嗯,我已经这样做了,数据库在应用程序中运行良好。我的问题是 pg 命令看不到它,即使将 DATABASE_URL 配置变量设置为指向新的生产数据库。 这解决了我从 Hobby-dev 升级到 Hobby-basic 后的问题 官方有这样的方法:blog.heroku.com/expanding_the_power_of_add_ons 谢谢@MeoriOransky,这正是我要找的:heroku addons:attach my-sushi-db -a my-sushi-reporting --as MAIN_SUSHI_DB(在本例中,my-sushi-reporting 是数据库将附加到的应用程序)【参考方案2】:

Heroku 插件现在可以跨应用程序附加,并且可以在单个应用程序上多次附加。

heroku addons:attach ADDON_NAME -a APP_NAME

来源:https://devcenter.heroku.com/changelog-items/646


要知道插件的名称,请执行以下操作:

heroku addons

来源:https://devcenter.heroku.com/articles/managing-add-ons

【讨论】:

这个答案比 2012 年最受好评的@rdegges 答案更好,因为 Heroku 有时会更改数据库 URL,可能是在中断或其他维护操作之后。 如果你想将新数据库设置为默认值,你必须推广它,比如heroku pg:promote HEROKU_POSTGRESQL_ONYX --app app_destination【参考方案3】:

要将您在 https://postgres.heroku.com/ 创建的数据库附加到您正在使用的实际 heroku 应用程序中,您不能使用任何 pg backup commands 并且据我所知,没有支持的 Heroku 方式将数据库附加到 Heroku 应用程序。

但是,您可以使用 pg_dump 创建数据库备份,然后使用 pg_restore 填充附加到应用程序的新数据库:

pg_dump -i -h hostname -p 5432 -U username -F c -b -v -f "backup-filename" database_name

完成后,您可以使用以下内容填充新数据库:

pg_restore -i -h new_hostname -p 5432 -U new_username -d new_database_name -v "same_backup_filename"

即使您从“基本计划”升级到“起重机计划”,您仍然需要进行备份和恢复,但是由于数据库已经附加到您的应用程序,您可以使用 heroku 备份命令。

【讨论】:

以上是关于如何将数据库附加到 Heroku 中的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列附加到列表中的 data.frames,其中该列应包含计算读取的那些 data.frames 的结构信息?

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

Laravel ajax存储请求errormessage,数据附加到视图

使用 node.js 中的数据库插件将文件添加到 heroku 应用程序

Nodejs 应用程序的 Heroku Postgres 附加连接字符串

我如何将本地 PostgreSQL 数据库复制到 Heroku for Spring Boot 应用程序