/ / Comment exécuter les migrations Django automatiquement sur Deis lors de l'utilisation de déploiements de buildpack? - django, deis

Comment exécuter automatiquement les migrations Django sur Deis lors de l'utilisation de déploiements de buildpack? - Django, deis

Le hook post-compilation sur Deis semble fonctionner différemment que sur Heroku.

Sur Heroku, je pourrais simplement ajouter un fichier bin / post-compilation contenant:

#!/usr/bin/env bash

python manage.py migrate --noinput

Sur Deis cela me donne une trace

Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
No module named django.core.management

Quelqu'un utilise-t-il Django sur Deis à l'aide de buildpacks et en a-t-il un exemple concret?

Réponses:

1 pour la réponse № 1

J'ai finalement trouvé deux solutions.

La réponse simple est simplement de fournir un chemin complet vers python. Je l’ai testé en ajoutant un fichier bin / post-compilation à deis / exemple-python-django

#!/usr/bin/env bash

/app/.heroku/python/bin/python manage.py migrate --noinput

Cependant, cette solution ne fonctionne pas si vous avez besoin d’accéder à l’une de vos variables de configuration, ce qui est très probablement le cas si vous suivez la méthodologie de l’application 12 Factor.

Malheureusement, deis n’exécute pas les hooks post-compilation de la même manière que Heroku, nous devons donc exporter nos variables d’environnement d’abord. sous-env fonction de la heroku-buildpack-python comme guide, je suis venu avec cette ...

#!/usr/bin/env bash

echo "-----> Running post-compile hook"

BUILD_DIR=/tmp/build
ENV_DIR=/tmp/environment

BLACKLIST="^(GIT_DIR|STACK|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$"

# Python-specific variables.
export PYTHONHOME=$BUILD_DIR/.heroku/python
export PYTHONPATH=$BUILD_DIR/

if [ -d "$ENV_DIR" ]; then
for e in $(ls $ENV_DIR); do
echo "$e" | grep -E "$WHITELIST" | grep -qvE "$BLACKLIST" &&
export "$e=$(cat $ENV_DIR/$e)"
:
done
fi

$PYTHONHOME/bin/python manage.py migrate --noinput