9
votes

Django aws élastique beanstalk migrer la base de données

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 à: 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 relation "comptes_user" n'existe pas la ligne 1: SELECT compte (*) à partir de "comptes_user" car ma base de données n'a pas été migrée.

Ce que j'ai essayé: J'ai essayé de nombreuses variantes de choses. Heureusement, il y a une abondance de poteaux Stackoverflow et d'un couple de didacticiels. Malheureusement, ils semblent tous utiliser une version différente et ce qu'ils suggèrent ne s'appliquent pas à mon projet.

Il est assez clair pour moi que je dois exécuter la migration dans un foobar.config fichier à l'intérieur du dossier .Ebextensions / . Voici la base de ce que je veux faire: xxx

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"

Je trouve que je dois activer l'environnement virtuel pour la commande , qui a du sens. D'asdf j'essaie ceci: xxx

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?

Versions: Python 3.4.1, Django 1.7.7, AWS CLI 3.2.1, Postgres 9.3


3 commentaires

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/...


3 Réponses :


10
votes

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 docker exécuté 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 pour obtenir l'identifiant du conteneur.

à la fin mon setup.config ressemble à celui xxx

J'espère que cela résout votre problème aussi.


3 commentaires

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 "


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.



15
votes

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)

Vous pouvez également utiliser la commande (code> de la commande dans ebextensions et écrire un fichier sur / opt / elasticbeanstalk / hameçons / appdéploy / post mais cela fonctionnera sur une autre instance

Vous pouvez combiner ces deux éléments dans: xxx

Ceci créera un script post déployer dans le bon Dir et seulement Sur le leader.

Cela fonctionne vraiment bien pour moi, mais être averti, les annuaires des crochets sont des fonctionnalités non documentées


0 commentaires

-3
votes

Mise à jour des informations sur la dernière version élastique beanstalk.

J'utilise 64bit Amazon Linux 2016.09 v2.3.3 exécutant Python 3.4 .

La commande suivante fonctionne sans avoir à activer le virtualenv ou créer une application post-application. Crochet de déploiement. xxx

afin de prouver que les commandes conteneur 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!


1 commentaires

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.