Je déplouve un projet Django vers AWS à l'aide d'élastic beanstalk et je suis coincé sur la migration de la base de données.
où je suis à: strong> Je suis capable de déployer avec succès mon projet Django et de charger La page via mysubdomain.elasticBeanstalk.com. La page se charge sans erreur tant que j'accumule une page qui doit faire appel à une base de données. Je reçois ensuite une erreur comme Il est assez clair pour moi que je dois exécuter la migration dans un Dans les journaux, je vois que le script de déploiement post a essayé de fonctionner mais il a échoué. Je ne reçois aucune autre information sur l'erreur, la seule chose que je vois est quelque chose comme "Erreur: 01_migrate Post de déploiement Script de déploiement" P> Je trouve que je dois activer l'environnement virtuel pour la commande , qui a du sens. D'asdf j'essaie ceci: p> mais cela ne fonctionne pas. En fait, via SSH, je découvre que je n'ai même pas de / opt / python / dossier, uniquement / opt / AWS / et / opt / elasticbeanstalk /. Tous les tutoriels et donc les questions se réfèrent à ce dossier, mais je ne l'ai pas? P> Versions:
Python 3.4.1, Django 1.7.7, AWS CLI 3.2.1, Postgres 9.3 P> P> relation "comptes_user" n'existe pas la ligne 1: SELECT compte (*) à partir de "comptes_user" code> car ma base de données n'a pas été migrée. P>
foobar.config code> fichier à l'intérieur du dossier
.Ebextensions / code>. Voici la base de ce que je veux faire: p>
3 Réponses :
Le conteneur_commands ne sont pas exécutés dans le conteneur Docker. Ils sont dirigés sur l'instance EC2 directement.
Actuellement, j'utilise à la fin mon setup.config ressemble à celui p> J'espère que cela résout votre problème aussi. p> p> docker exécuté code> pour faire la migration. Comme le conteneur Docker concerné est Afaik, le dernier a commencé, j'utilise
docker ps -a -a -no-trunc -q | tête -n 1 code> pour obtenir l'identifiant du conteneur.
Il suffit de lire: forums.aws.aMazon.com/ann.jspa?annid=2982 Nous aurions pu nous avoir sauvé le problème ...
J'ai essayé cela, mais j'ai remarqué que ça obtient mon vieux conteneur et pas mon nouveau! Quelqu'un d'autre a-t-il vu ce problème? J'essayais une commande légèrement modifiée, mais équivalente de: "conteneur =` docker ps -a -a -a -no-trunc | grep aws_beanstalk | Cut -D '' -F1 | Head -1` && Docker Exec $ conteneur python3 gérer.py migrer " code>
Cela fonctionne mais exécutera la commande sur la version actuelle et non la mise en scène (celle qui est actuellement déployée) comme indiqué @Mrcols. La solution fournie par Nkhumphreys semble faire l'affaire sur la version nouvellement déployée.
Je sais que c'est un ancien poste, mais je veux poster ma réponse ici car il m'a fallu assez longtemps pour comprendre.
Sebastian genre de me pointe dans la bonne direction, mais le problème de cette approche est-il Exécute avant le déploiement (vous migrez donc l'ancien code) p>
Vous pouvez également utiliser la commande code> (code> de la commande code> dans ebextensions et écrire un fichier sur / opt / elasticbeanstalk / hameçons / appdéploy / post mais cela fonctionnera sur une autre instance p>
Vous pouvez combiner ces deux éléments dans: p> Ceci créera un script post déployer dans le bon Dir et seulement Sur le leader. P> Cela fonctionne vraiment bien pour moi, mais être averti, les annuaires des crochets sont des fonctionnalités non documentées p> p>
Mise à jour des informations sur la dernière version élastique beanstalk.
J'utilise La commande suivante fonctionne sans avoir à activer le afin de prouver que les commandes 64bit Amazon Linux 2016.09 v2.3.3 exécutant Python 3.4 Code>. P>
virtualenv code> ou créer une application post-application. Crochet de déploiement. p>
conteneur code> Exécutera sur une phase de déploiement post, j'ai modifié mes modèles, a généré les scripts de migration mis à jour, déployé la nouvelle version et vérifié pour voir si la base de données a été migrée avec succès: Succès! P> P>
En effet, vous n'exécutez pas votre application Django dans un conteneur Docker, mais plutôt sur Python 3.4 Image. Dans une configuration avec Docker, ses différents (voir Commentaires sur l'exécution d'une commande dans le dernier conteneur Docker). Ceci est un problème spécifique aux environnements Docker.
Je suis coincé au même endroit. Ce que j'ai découvert: Les conteneurs_commands ne sont pas exécutés dans le conteneur Docker. Ils sont exécutés sur l'instance EC2 elle-même. Je suppose que nous devons exécuter la migration avec quelque chose comme "docker exécu [nom_name_name] / var / app / bin / python gérer.py migrer --NOoinput malheureusement, je suis toujours en difficulté à trouver le correct [Nom de conteneur]
@Sebastianannies génial, content d'avoir trouvé quelqu'un au même endroit! Merci pour le conseil, je vais travailler sur cela aussi et vous permet de savoir tout ce que je trouve
Je ne sais pas quand ce tutoriel a été écrit, mais ils ont une section spécifique à la migration de Django docs.aws.amazon.com/elasticBeanstalk/Latest/dg/...