如何为 heroku 应用程序更改 DATABASE_URL
How to change DATABASE_URL for a heroku application
我想在我的 heroku 应用程序中使用外部数据库。但我无法编辑配置文件。我尝试使用 GUI,它说,无法覆盖附件值 DATABASE_URL。虽然我也尝试使用 CLI。我使用了命令:heroku config:addDATABASE_URL="postgresql://username:password@IP:PORT"
。但是,这会引发错误 ... is not a heroku command.
与explained in this article一样,set/add配置变量的正确语法是
$ heroku config:set DATABASE_URL="postgresql://username:password@IP:PORT"
但是,看起来(参见评论)DATABASE_URL
已被弃用,尝试更新它会触发错误。
解决了。仅供有相同问题或想有类似实现的用户参考。这是对我有用的解决方法。
Heroku 不再覆盖 databse.yml
,所以我只是修改 database.yml
中的 DATBASE_URL
并推送它:)
它也成功了!
在尝试了大部分答案后,我在 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=
今天我遇到了同样的情况,我需要将 postgres
更改为 postgis
。分离对我不起作用,所以我这样做是为了 database.yml
:
production:
url: <%= ENV['DATABASE_URL'].sub(/^postgres/, "postgis") %>
https://github.com/rgeo/activerecord-postgis-adapter/issues/214.
另一种不需要分离的方法(这可能不是切换的预期结果)是简单地附加新数据库然后提升它,Heroku Documents 明确指出这是一种方法设置 DATABASE_URL
.
heroku addons:attach heroku-postgresql -a <app_name>
heroku pg:promote heroku-postgresql -a <app_name>
根据 Heroku docs 这就是您与多个应用程序共享数据库的方式。
heroku addons:attach my-originating-app::DATABASE --app sushi
就我而言,我需要使用我的个人数据库 (postgres) 启动 java spring 启动应用程序。我在 AWS 上有一个实例,加载应用程序时出现错误,因为它会在没有 ssl 的情况下连接。
We used to suggest adding the URL parameter sslmode=disable to JDBC URLs. We now require use of SSL for all new Heroku Postgres databases. We will be enforcing use of SSL on all Heroku Postgres databases from March 2018. Please do not disable SSL for your database or your applications may break.
因此,继续第 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”。
最后,rebuild/deploy(在我的情况下,在 github 上推送到我的回购协议后是自动的)。
我希望这会对某人有所帮助。
和平...
编辑 DATABASE_URL
的一种方法是创建另一个应用程序并在其中添加 heroku_postgres
插件,然后获取该数据库的 url 并在您的主应用程序通过配置环境变量并将DATABASE_URL
的值设置为数据库的url。
现在您可以轻松更改 DATABASE_URL
,因为它未随应用程序一起提供。
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 连接到 Heroku Postgres 服务。4.x
我想在我的 heroku 应用程序中使用外部数据库。但我无法编辑配置文件。我尝试使用 GUI,它说,无法覆盖附件值 DATABASE_URL。虽然我也尝试使用 CLI。我使用了命令:heroku config:addDATABASE_URL="postgresql://username:password@IP:PORT"
。但是,这会引发错误 ... is not a heroku command.
与explained in this article一样,set/add配置变量的正确语法是
$ heroku config:set DATABASE_URL="postgresql://username:password@IP:PORT"
但是,看起来(参见评论)DATABASE_URL
已被弃用,尝试更新它会触发错误。
解决了。仅供有相同问题或想有类似实现的用户参考。这是对我有用的解决方法。
Heroku 不再覆盖 databse.yml
,所以我只是修改 database.yml
中的 DATBASE_URL
并推送它:)
它也成功了!
在尝试了大部分答案后,我在 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=
今天我遇到了同样的情况,我需要将 postgres
更改为 postgis
。分离对我不起作用,所以我这样做是为了 database.yml
:
production:
url: <%= ENV['DATABASE_URL'].sub(/^postgres/, "postgis") %>
https://github.com/rgeo/activerecord-postgis-adapter/issues/214.
另一种不需要分离的方法(这可能不是切换的预期结果)是简单地附加新数据库然后提升它,Heroku Documents 明确指出这是一种方法设置 DATABASE_URL
.
heroku addons:attach heroku-postgresql -a <app_name>
heroku pg:promote heroku-postgresql -a <app_name>
根据 Heroku docs 这就是您与多个应用程序共享数据库的方式。
heroku addons:attach my-originating-app::DATABASE --app sushi
就我而言,我需要使用我的个人数据库 (postgres) 启动 java spring 启动应用程序。我在 AWS 上有一个实例,加载应用程序时出现错误,因为它会在没有 ssl 的情况下连接。
We used to suggest adding the URL parameter sslmode=disable to JDBC URLs. We now require use of SSL for all new Heroku Postgres databases. We will be enforcing use of SSL on all Heroku Postgres databases from March 2018. Please do not disable SSL for your database or your applications may break.
因此,继续第 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”。
最后,rebuild/deploy(在我的情况下,在 github 上推送到我的回购协议后是自动的)。
我希望这会对某人有所帮助。
和平...
编辑 DATABASE_URL
的一种方法是创建另一个应用程序并在其中添加 heroku_postgres
插件,然后获取该数据库的 url 并在您的主应用程序通过配置环境变量并将DATABASE_URL
的值设置为数据库的url。
现在您可以轻松更改 DATABASE_URL
,因为它未随应用程序一起提供。
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 连接到 Heroku Postgres 服务。4.x