2017-08-08 2 views
0

Ma structure de répertoire du projet ressemble à ce qui suit:Django gunicorn aucun module erreur nommé

enter image description here

Mon fichier wsgi:

import os 

from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

application = get_wsgi_application() 

et mon fichier manage.py:

import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 
    try: 
     from django.core.management import execute_from_command_line 
    except ImportError: 
     # The above import may fail for some other reason. Ensure that the 
     # issue is really that Django is missing to avoid masking other 
     # exceptions on Python 2. 
     try: 
      import django 
     except ImportError: 
      raise ImportError(
       "Couldn't import Django. Are you sure it's installed and " 
       "available on your PYTHONPATH environment variable? Did you " 
       "forget to activate a virtual environment?" 
      ) 
     raise 
    execute_from_command_line(sys.argv) 

dans mes paramètres .py J'ai:

WSGI_APPLICATION = 'config.wsgi.application' 

j'ai ajouté mon chemin de projet python avec suivant:

export PYTHONPATH=/home/ec2-user/amm_inovision_backend:$PYTHONPATH 

et je suis en train d'exécuter la commande gunicorn où mon fichier est manage.py comme: gunicorn amm_inovision_backend.config.wsgi:application

Mais il me jette l'erreur aucun module nommé amm_inovision_backend.config.wsgi

Si je cours à la place gunicorn config.wsgi:application il jette aucun module nommé amm_inovision_backend.config.settings

Qu'est-ce que je fais mal?

Remarque: la capture d'écran, il est amm_ino_backend mais en réalité il est amm_inovision_backend dans la production

Répondre

1

lorsque vous souhaitez utiliser gunicorn vous devez exécuter gunicorn installé sur votre environnement virtuel.
vous n'avez donc pas besoin d'exporter un chemin python, vous avez seulement besoin de trouver le chemin de gunicorn sur votre virtual-env où Django est installé, ou vous pouvez ajouter un chemin à l'environnement virtuel pour ne pas projeter les fichiers.
aussi vous devez d'abord modifier votre wsgi.py
vous devez remplacer ce os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") avec os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

votre commande doit être quelque chose comme ça:
/path/to/.virtual-envs/your-env/bin/gunicorn config.wsgi:application

+0

Eh bien, je suis usi ng virtuel env sur mon local mais je n'en ai pas créé un en production, j'ai simplement cloné le repo et j'ai installé pip à partir de requirements.txt et mon application a démarré. Cela pourrait-il être un problème? – Nitish

+0

il est préférable d'utiliser env virtuel même si vous êtes en production pour éviter tout problème de conflit, mais de toute façon vous pouvez aller sans env virtuel, mais vous n'avez pas besoin d'exporter PYTHONPATH s'il vous plaît supprimez-le et lancez gunicorn config.wsgi: application' –

+0

@Nitish n'est pas cette réponse comme la réponse que vous avez marqué!, Je vous ai répondu après quelques minutes, pas après une journée, quel est votre point de vue? –

1

Utilisation:

import os 
from django.core.wsgi import get_wsgi_application 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 
application = get_wsgi_application() 

note la "CONFIG.SETTINGS"