如何配置heroku.yml以使用Heroku PostgreSQL插件?

时间:2019-04-24 09:48:02

标签: django postgresql docker heroku continuous-deployment

我目前要做的是通过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的名称(而我尝试使用{{ 1}}),但看起来两者都不是连接数据库的正确方法。

我寻求一些帮助来更正我的配置或设置文件,以及如何在heroku的docker CD管道上使用PostgreSQL插件。我在这里停留了一段时间。预先感谢,

1 个答案:

答案 0 :(得分:0)

我自己弄清楚了。我犯了两个错误。

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

如何使其工作

直接方法是使用dj_database_url,将数据库设置更新为

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

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

import django_heroku
django_heroku.settings(locals())

参考