如何更改 Heroku 应用程序的 DATABASE_URL
Posted
技术标签:
【中文标题】如何更改 Heroku 应用程序的 DATABASE_URL【英文标题】:How to change DATABASE_URL for a heroku application 【发布时间】:2016-05-05 20:29:29 【问题描述】:我想在我的 heroku 应用程序中使用外部数据库。但我无法编辑配置部件。我尝试使用 GUI,它说,不能覆盖附件值 DATABASE_URL。虽然我也尝试使用 CLI。我使用了命令:heroku config:addDATABASE_URL="postgresql://username:password@IP:PORT"
。但是,这会引发错误... is not a heroku command.
【问题讨论】:
我的错,编辑过程中的错字。顺便说一句,命令中有一个“=”,但它不起作用 请发布错误消息的完整输出。heroku config:add VAR="VAL"
肯定可以工作。
设置配置变量并重新启动 app-name... 完成 VAR: VAL
我的意思是你的错误信息,不要尝试我的例子,这只是为了展示语法应该是什么样子。无论如何,Heroku 文档位于 devcenter.heroku.com/articles/config-vars
【参考方案1】:
在尝试了大多数这些答案之后,我在 2016 年遇到了一个更新,here: 需要先分离数据库,然后更新DATABASE_URL的变量。
heroku addons:attach heroku-postgresql -a <app_name> --as HEROKU_DATABASE
heroku addons:detach DATABASE -a <app_name>
heroku config:add DATABASE_URL=
【讨论】:
+1 必须在设置DATABASE_URL
之前分离当前数据库。从 Heroku Postgres 迁移到 AWS 上的 RDS 时这样做。
我遇到了错误“无法销毁最后一个附件到计费应用程序的资源”,并且必须在分离之前销毁我的 Heroku 数据库(请参阅:***.com/questions/30611801/…)。从好的方面来说,您可以创建一个新的 Heroku 数据库,按照下面列出的方式对其进行升级,然后将其销毁以释放此保留。之后,您可以使用 config:add 或 config:set 设置外部 URL(例如 RDS)。【参考方案2】:
另一种不需要分离的替代方法(这可能不是切换的预期结果)是简单地附加新数据库然后升级它,Heroku Documents 明确指出这是设置@987654322 的一种方式@。
heroku addons:attach heroku-postgresql -a <app_name>
heroku pg:promote heroku-postgresql -a <app_name>
【讨论】:
我不得不使用这个版本而不是分离然后添加配置。 这对我有用。请注意,您需要将heroku-postgresql
替换为您要附加到的新数据库的名称。这可以在 Heroku Postgres 下的应用概览页面上找到。【参考方案3】:
作为explained in this article,设置/添加配置变量的正确语法是
$ heroku config:set DATABASE_URL="postgresql://username:password@IP:PORT"
但是,看起来(参见 cmets)DATABASE_URL
已被弃用,尝试更新它会触发错误。
【讨论】:
嘿,给我一个错误无法覆盖附件值DATABASE_URL。 Heroku 贬低了更新 database_url 是一些 *** 帖子所说的。 谢谢。我已经更新了答案,以防其他人偶然发现这个帖子。 谢谢。我添加了一个对我有用的解决方法的答案。欢迎分享。【参考方案4】:我今天遇到了同样的情况,我需要将postgres
更改为postgis
。分离对我不起作用,所以我对 database.yml
进行了此操作:
production:
url: <%= ENV['DATABASE_URL'].sub(/^postgres/, "postgis") %>
https://github.com/rgeo/activerecord-postgis-adapter/issues/214.
【讨论】:
【参考方案5】:解决了。仅供有相同问题或希望有类似实现的用户参考。这是对我有用的解决方法。
Heroku 不再覆盖 databse.yml,所以我只是修改了 database.yml 中的 DATBASE_URL 并推送它:)
它也成功了!
来源:https://discussion.heroku.com/t/rails-4-1-database-yml-no-longer-overwritten-on-heroku/550
【讨论】:
链接失效了,能给我们举个database.yml的例子吗? 去heroku仪表板>数据库>删除数据库;回到 config/database.yml 输入数据库的详细信息。像这样gist.github.com/pbssubhash/705dfb538aea75ee9ab3 但是,不建议对值进行硬编码,直到我们找到更好的值,你可以按照这个。如果您仍有问题,请在此处评论,我很乐意为您提供帮助 @jcstritt 所以你将你的 database.yml 推送到源代码管理中? 是的@AnthonyTo。我做到了。 您总是可以将实际的 url 放入环境变量中,然后使用 figaro gem 之类的东西推送到 Heroku。【参考方案6】:基于Heroku docs,这是您与多个应用共享数据库的方式。
heroku addons:attach my-originating-app::DATABASE --app sushi
【讨论】:
【参考方案7】:SQLAlchemy 1.4.x 已删除对 Heroku Postgres (https://github.com/sqlalchemy/sqlalchemy/issues/6083) 使用的 postgres:// URI 方案的支持。为了保持兼容性,请在设置与 SQLAlchemy 的连接之前执行以下操作:
import os
import re
uri = os.getenv("DATABASE_URL") # or other relevant config var
if uri.startswith("postgres://"):
uri = uri.replace("postgres://", "postgresql://", 1)
# rest of connection code using the connection string `uri`
这将允许您使用 SQLAlchemy >= 1.4.x 连接到 Heroku Postgres 服务
【讨论】:
这个问题是专门针对 Ruby 的,所以 Python 的答案没有用。【参考方案8】:就我而言,我需要使用我的个人数据库 (postgres) 启动一个 java spring boot 应用程序。我在 AWS 上有一个实例,在加载应用程序时发生错误,因为它会在没有 ssl 的情况下连接。
考虑到这个文档 (https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#using-ssl-with-postgresql),它说:
我们曾经建议将 URL 参数 sslmode=disable 添加到 JDBC URL。我们现在要求对所有新的 Heroku Postgres 数据库使用 SSL。从 2018 年 3 月起,我们将在所有 Heroku Postgres 数据库上强制使用 SSL。请不要为您的数据库禁用 SSL,否则您的应用程序可能会中断。
所以,继续第 1 步,我删除了资源选项卡上的插件 Heroku Postgres。 第 2 步,我更改了我的 application.yml 来自:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://<url>:<port>/<dataBaseName>?createDatabaseIfNotExist=true&useSSL=false
username: <user>
password: <pass>
到
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://<url>:<port>/<dataBaseName>?createDatabaseIfNotExist=true&useSSL=false&sslmode=disable
username: <user>
password: <pass>
我在 url 字符串的末尾添加了“&sslmode=disable”。
最后,重建/部署(在我的情况下,这是在推入我在 github 上的 repo 后自动执行的)。
我希望这会对某人有所帮助。
和平...
【讨论】:
【参考方案9】:编辑DATABASE_URL
的一种方法是创建另一个应用程序并在那里添加heroku_postgres
附加组件,然后获取该数据库的 url 并通过配置环境变量在主应用程序中使用它并设置DATABASE_URL
的值到数据库的那个 url。
现在您可以轻松更改DATABASE_URL
,因为它未与应用程序关联。
【讨论】:
以上是关于如何更改 Heroku 应用程序的 DATABASE_URL的主要内容,如果未能解决你的问题,请参考以下文章
从 github 部署更改的模型时,如何在 heroku 上运行 makemigrations/migrate?