Как настроить heroku.yml для использования дополнения Heroku PostgreSQL? - PullRequest
0 голосов
/ 24 апреля 2019

В настоящее время я занимаюсь развертыванием своего приложения Django в Heroku через Создание образов Docker с помощью heroku.yml .Приложение хорошо построено, но не может подключиться к базе данных, поскольку хост настроен неправильно.Моя 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), но похоже, что оба не являются правильным способом подключения к базе данных.

Я ищу некоторую помощь, чтобы исправить мою конфигурациюили настройки файлов и как использовать аддон PostgreSQL на конвейере Docker CD heroku.Я застрял здесь на некоторое время.Заранее спасибо,

1 Ответ

1 голос
/ 27 апреля 2019

Я понял это сам. Я сделал 2 ошибки.

  1. heroku.yml похоже на docker-compose.yml, но между addons в setup и build нет bridge. Ключевое слово как не равно имя_ контейнера .
  2. Контейнер (в случае, если это веб), он все еще может напрямую обращаться к 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())

Ссылки

...