Несколько команд Heroku при развертывании Docker - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь выполнить несколько шагов после того, как Heroku построит контейнер с моим Python Django приложением внутри.

То, с чего я начал в heroku.yml (и все работало нормально), было :

build:
  docker:
    web: Dockerfile
release:
  image: web
  command:
    - python manage.py collectstatic --noinput

Теперь я хотел бы также запустить миграции и выполнить некоторые другие команды (я использую базу данных sqlite), но следующее не работает и не дает никаких результатов.

build:
  docker:
    web: Dockerfile
release:
  image: web
  command:
    - python manage.py collectstatic --noinput && python manage.py makemigrations --no-input && python manage.py migrate --no-input && python manage.py migrate auth --no-input && python manage.py makemigrations auth --no-input && python manage.py migrate --no-input --run-syncdb && echo "from django.contrib.auth.models import User; User.objects.create_superuser('user', 'user@example.com', 'example', first_name='The', last_name='User')" | python manage.py shell"

Вы знаете, что мне здесь может не хватать? Я использую план Free Heroku.

Я попытался обернуть команды в bash -c "COMMANDS GO HERE", но затем получил ошибки python не найдено (пробовал как python, так и python3)

1 Ответ

0 голосов
/ 19 июня 2020

Мне удалось заставить его работать. В heroku.yml просто вызовите сценарий оболочки, содержащий все шаги:

build:
  docker:
    web: Dockerfile
release:
  image: web
  command:
    - ./on_release.sh

Для меня это сработало, когда я поместил сценарий в рабочий каталог своего контейнера (то же место, где находится manage.py ). Я не смог найти больше информации о том, как именно это работает.

Из heroku logs -t выясняется, что Heroku уже использует «bash - c» под капотом (возможно, именно так Docker обертывает команды из файла Yaml).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...