web-dev-qa-db-fra.com

Configuration de Django sur AWS Elastic Beanstalk: WSGIPath introuvable

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?

26
Xephryous

De https://forums.aws.Amazon.com/thread.jspa?messageID=396656&#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
14
tutuDajuju

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.

8
Rose Perrone

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.

3
Leo

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"
2
capcom

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:

  1. Initialiser l'application
    1. eb init
    2. Sélectionnez une région par défaut
    3. Entrez le nom de l'application (utilisé par défaut en appuyant sur entrée)
    4. Confirmé que j'utilise Python
    5. Version Python sélectionnée compatible avec mon environnement local
    6. Configurer SSH
  2. Créer un environnement
    1. eb create
    2. Entrez le nom de l'environnement (utilisé par défaut en appuyant sur entrée)
    3. Entrez le préfixe DNS CNAME (utilisé par défaut en appuyant sur entrée)
    4. Sélectionnez un type d'équilibreur de charge (j'ai sélectionné classic en entrant 1)

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.

2
user2583728

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.

0
Arun K