【问题标题】:How to change DATABASE_URL for a heroku application如何更改 Heroku 应用程序的 DATABASE_URL
【发布时间】: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

标签: ruby-on-rails postgresql heroku heroku-postgres


【解决方案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 数据库(请参阅:stackoverflow.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 是一些 stackoverflow 帖子所说的。
  • 谢谢。我已经更新了答案,以防其他人偶然发现这个帖子。
  • 谢谢。我添加了一个对我有用的解决方法的答案。欢迎分享。
【解决方案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,因为它未与应用程序关联。

        【讨论】:

          猜你喜欢
          • 2015-08-17
          • 2020-08-21
          • 2012-07-15
          • 2019-09-03
          • 1970-01-01
          • 2013-02-21
          • 2015-11-28
          • 2013-02-09
          • 1970-01-01
          相关资源
          最近更新 更多