【问题标题】:How to config the heroku.yml to use the Heroku PostgreSQL addon?如何配置 heroku.yml 以使用 Heroku PostgreSQL 插件?
【发布时间】:2019-09-13 13:53:32
【问题描述】:

我目前所做的是通过Building Docker Images with heroku.yml 将我的 Django 应用程序部署到 Heroku。 该应用程序构建良好,但无法连接到数据库,因为主机配置不正确。我的heroku.yml 配置是

setup:
  addons:
    - plan: heroku-postgresql
      as: DATABASE
build:
  docker:
    web: Dockerfile
  config:
    DJANGO_SETTINGS_MODULE: Django-BaaS.settings_docker
release:
  command:
    - python manage.py migrate
  image: web
run:
  web: gunicorn Django-BaaS.wsgi

我的settings_docker 是

from .settings_base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'psql',
        'HOST': 'DATABASE',
        'PORT': '5432'
    }
}

我的理解是heroku.yml 是一个类似于docker-compose.yml 的文件,所以我尝试使用DATABASE 作为HOST 名称(我尝试使用localhost),但看起来像这样两者都不是连接数据库的正确方法。

我寻求一些帮助来纠正我的配置或设置文件以及如何在 heroku 的 docker CD 管道上使用 PostgreSQL 插件。我被困在这里一段时间。提前致谢,

【问题讨论】:

    标签: django postgresql docker heroku continuous-deployment


    【解决方案1】:

    我自己想出来的。我犯了两个错误。

    1. heroku.yml 类似于docker-compose.yml,但在setup 和build 中的addons 之间,没有bridge。关键字 as 不等于 container_name。
    2. 容器(如果是web),仍然可以直接访问psql addon,但是访问的url不是127.0.0.1或者localhost(会尝试访问容器本身),它是存储在environment variable 中的动态值。

    如何让它工作

    直接的方法是使用dj_database_url,将db设置更新为,

    import dj_database_url
    DATABASES['default'] = dj_database_url.parse(os.environ['DATABASE_URL'])
    

    更好的方法是使用django_heroku,将设置更新为,

    import django_heroku
    django_heroku.settings(locals())
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2019-01-30
      • 2019-10-31
      • 2023-03-14
      • 1970-01-01
      • 2016-09-24
      • 2020-05-17
      相关资源
      最近更新 更多