Cela fait plusieurs jours que j'essaie de configurer Django sous Elastic Beanstalk d’Amazon Web Services. Je pense que le problème que je frappe est celui-ci:
ERROR - Your WSGIPath refers to a file that does not exist.
J'ai suivi le didacticiel ici et tout se passe bien jusqu'à la fin de l'étape 6, mais je ne peux rien faire d'autre que la page générique Elastic Beanstalk de l'étape 5, n ° 2. Quand je cours
./manage.py runserver
sur mon ordinateur local, tout fonctionne comme il se doit, mais je ne parviens pas à déployer cette page. J'ai d'abord essayé avec un petit site Django que j'ai écrit moi-même. Cela n'a pas fonctionné, alors j'ai supprimé tout ce que j'avais fait et réessayé. Cela n'a pas fonctionné. J'ai donc supprimé tout cela et réessayé avec une nouvelle installation de Django. J'ai essayé cela plusieurs fois, mais je pense qu'il me manque quelque chose d'important.
J'ai ajouté un fichier python.config comme décrit dans ce tutoriel .
Voici ma structure de fichier:
-.git/
-.mysite/
-myapp/
-__init__.py
-models.py
-tests.py
-views.py
-mysite/
-__init__.py
-settings.py
-urls.py
-wsgi.py
-.ebextensions/
-python.config
-manage.py
-mysite.db
-requirements.txt
De mon settings.py:
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.sqlite3',
'NAME': 'mysite.db',
'USER': '',
'PASSWORD': '',
'Host': '',
'PORT': '',
}
}
Voici python.config:
container_commands: 01_syncdb:
command: "Django-admin.py syncdb --noinput"
leader_only: true
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: mysite/wsgi.py
- option_name: Django_SETTINGS_MODULE
value: mysite.settings
- option_name: AWS_SECRET_KEY
value: <This is my secret key>
- option_name: AWS_ACCESS_KEY_ID
value: <This is my access key>
Y a-t-il un autre endroit où j'ai besoin de définir mon WSGIPath? Existe-t-il un moyen de le faire via la console AWS? Devrais-je simplement ignorer EB et utiliser directement EC2?
De https://forums.aws.Amazon.com/thread.jspa?messageID=396656񠵰
Le répertoire ".ebextensions" doit figurer dans le répertoire de niveau racine de votre application, mais à la sortie du journal, il se trouve plutôt dans le répertoire "mysite/.ebextensions". Ainsi, par exemple, après avoir suivi le didacticiel Django dans la documentation lorsque vous exécutez "git aws.Push", votre répertoire racine se présente comme suit:
.
├── .ebextensions
│ └── python.config
├── .elasticbeanstalk
│ ├── config
├── .git
├── .gitignore
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
Au lieu de cela:
.
└── mysite
├── .ebextensions
├── .elasticbeanstalk
├── .git
├── .gitignore
├── manage.py
├── mysite
└── requirements.txt
Recherchez .elasticbeanstalk/optionsettings.your-app-name
dans le répertoire racine de votre application. Recherchez WSGIPath
et assurez-vous que c'est le chemin que vous souhaitez. Il semble que la valeur par défaut soit application.py
.
J'ai eu le même problème ( "Votre WSGIPath fait référence à un fichier qui n'existe pas" ) et j'ai finalement trouvé une solution:
Remarque: au début, je cherchais dans la mauvaise direction, car EB affichait également le message suivant: Une erreur s'est produite lors de la construction: La commande 01_migrate a échoué. . Je pensais donc que les fichiers, y compris le fichier * .config, étaient correctement localisés.
Ok, voici ce qui a fonctionné pour moi après avoir essayé un million de choses. Vous devez exécuter eb update
pour mettre à jour l'environnement.
Donc assurez-vous que .elasticbeanstalk/optionsettings.whatever-env
a WSGIPath défini sur ce que vous voulez, et assurez-vous que .ebextensions/whatever.config
a ceci:
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: whatever/wsgi.py
Puis lancez eb update
et il devrait travailler. N'oubliez pas que vous devez définir l'alias pour vous assurer que votre commande eb
fonctionne réellement. Par exemple:
alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb"
J'ai eu le même problème après avoir suivi la documentation d'AWS jusqu'au point. Ce que j'ai fait pour l'éviter, a été d'initialiser une application via l'interface de ligne de commande EB, étape par étape, sans utiliser la commande que AWS docs avait chargée (~/ebdjango $ eb init -p python2.7 Django-tutorial), et de créer un environnement étape par étape. ainsi que. Les étapes que j'ai suivies dans l'interface de ligne de commande EB sont les suivantes:
eb init
eb create
Après la création de l'environnement, j'utilise eb config
pour ouvrir le fichier de configuration d'EB afin de confirmer que le chemin d'accès à mon WSGI correspond à ce qu'il devrait être:
aws:elasticbeanstalk:container:python:
NumProcesses: '1'
NumThreads: '15'
StaticFiles: /static/=static/
WSGIPath: path/to/wsgi.py
Si des modifications sont apportées, assurez-vous de sauvegarder le fichier et de vous assurer que tout est en ordre en entrant eb open
dans votre terminal pour ouvrir une fenêtre de navigateur utilisant le nom de domaine spécifié aux étapes précédentes.
Voici ce qui a fonctionné pour moi. J'ai créé le Eb en utilisant EBCLI et tous les fichiers sont générés. J'ai essayé d'ajouter WSGIPath à config.yml qu'il a généré, mais il n'a jamais été reflété lors du déploiement. Solution: Ouvrir eb config
Pour moi, il affiche WSGIPath: application.py
Je pense que ceci est une configuration par défaut pour Flask. Maintenant changez le en
WSGIPath: my_app/wsgi.py
enregistrer et déployer.