25

Ho cercato per diversi giorni di installare Django sotto l'Elastic Beanstalk di Amazon Web Services. Credo che il problema mi colpisce è questa:Impostazione di Django su AWS Elastic Beanstalk: WSGIPath non trovato

ERROR - Your WSGIPath refers to a file that does not exist. 

Ho seguito il tutorial here e tutto va bene fino alla fine del passaggio 6, ma non posso per la vita di me ottenere qualche cosa per visualizzare altre rispetto alla pagina generica Elastic Beanstalk del Passaggio 5, n. 2. Quando corro

./manage.py runserver 

sul mio computer locale, tutto funziona come dovrebbe, ma non riesco a ottenere quella pagina da distribuire. Ho provato per la prima volta con un piccolo sito Django che ho scritto io stesso. Non ha funzionato, quindi ho cancellato tutto ciò che avevo fatto e provato di nuovo, non funzionava, quindi ho cancellato tutto e ho provato di nuovo con una nuova installazione di django. Ho provato un sacco di volte a trafficare con piccole cose, ma penso che mi manchi qualcosa di importante.

Ho aggiunto un file python.config come descritto in this tutorial.

Ecco la mia struttura dei file:

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

Dal mio settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'mysite.db', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': '', 
     'PORT': '', 
    } 
} 

Ecco 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> 

c'è un altro posto ho bisogno di definire la mia WSGIPath? C'è un modo per farlo attraverso la console AWS? Dovrei semplicemente saltare completamente EB e usare EC2 direttamente?

+6

Questo problema è stato risolto come dettagliato [qui] (https://forums.aws.amazon.com/thread.jspa?messageID=396656񠵰). Stavo memorizzando tutto il codice in una directory, e ho zippato (e caricato) l'intera directory.Quello che avrei dovuto fare era zippare tutti i file rilevanti in quella directory piuttosto che nella directory stessa, così quando decomprimeranno i file saranno tutti nella directory principale del sito. Spero che questo aiuti qualcun altro con lo stesso problema. Penso di essermi imbattuto nello stesso problema caricando tramite la GUI e via git. – Xephryous

+2

Non dovresti modificare la domanda ma aggiungere la tua risposta e accettarla. – bikeshedder

+0

Si prega di prendere in considerazione che le modifiche non salvate non verranno distribuite, quindi è necessario avere tutte le modifiche sulla cartella ".ebextensions" impegnata per distribuirla con EB CLI. – nisevi

risposta

13

Da https://forums.aws.amazon.com/thread.jspa?messageID=396656&#396656

La directory ".ebextensions" deve essere nel livello di directory principale dell'applicazione, ma dall'uscita del registro, la directory è invece nella directory 'mysite/.ebextensions'. Così, per esempio, dopo aver seguito il tutorial Django in documenti quando si esegue "git aws.push" directory principale sarebbe simile a questa:

. 
├── .ebextensions 
│ └── python.config 
├── .elasticbeanstalk 
│ ├── config 
├── .git 
├── .gitignore 
├── manage.py 
├── mysite 
│ ├── __init__.py 
│ ├── settings.py 
│ ├── urls.py 
│ └── wsgi.py 
└── requirements.txt 

Invece di questo:

. 
└── mysite 
    ├── .ebextensions 
    ├── .elasticbeanstalk 
    ├── .git 
    ├── .gitignore 
    ├── manage.py 
    ├── mysite 
    └── requirements.txt 
+2

Questo è quello! In realtà ho risposto alla mia domanda in un commento [qui] (http://stackoverflow.com/questions/13102076/setting-up-django-on-aws-elastic-beanstalk-wsgipath-not-found/17711770?iemail=1&noredirect = 1 # comment17943273_13102076). Penso di non aver avuto abbastanza SO reputazione per rispondere al momento o qualcosa del genere. Ad ogni modo, il problema è risolto. – Xephryous

+1

Abbiamo avuto un problema con psycopg2 non installato. aggiungendo queste righe al nostro file .ebextensions/01-app.config risolto: pacchetti: yum: postgresql93-devel: [] –

8

Trova .elasticbeanstalk/optionsettings.your-app-name in la directory principale della tua app. Cerca WSGIPath e assicurati che sia il percorso che intendi. L'impostazione predefinita è application.py.

+0

Qual è il percorso relativo a? Anche lo script 'eb' sembra continuare a sovrascrivere il valore che ho inserito. – Mikhail

1

Ok, ecco cosa ha funzionato per me dopo aver provato un milione di cose. È necessario eseguire eb update per aggiornare l'ambiente.

Quindi assicuratevi .elasticbeanstalk/optionsettings.whatever-env ha WSGIPath impostata su ciò che si desidera, e assicurarsi che .ebextensions/whatever.config ha questo:

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: WSGIPath 
    value: whatever/wsgi.py 

Quindi eseguire eb update e dovrebbe lavoro. Ricorda che devi impostare l'alias per assicurarti che il tuo comando eb funzioni effettivamente.Per esempio:

alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb" 
+1

Credo che 'eb update' sia cambiato in' eb deploy' di recente. Questo potrebbe essere utile per le persone che cercano questo tipo di informazioni nel 2016 :) – Vlad

1

Ho avuto lo stesso problema ("Il tuo WSGIPath fa riferimento a un file che non esiste"), e finalmente trovato una soluzione:

Nota: In un primo momento, ero alla ricerca nella direzione sbagliata, perché EB è stato anche mostrando questo messaggio: Si è verificato Errore durante la costruzione: Comando 01_migrate riuscita.. Quindi, anche se i file, incluso il * .config, erano posizionati correttamente.

2

Ho avuto lo stesso problema dopo aver seguito i dot di AWS in punto. Quello che ho fatto per evitarlo è stato inizializzare un'applicazione tramite EB CLI passo dopo passo, senza usare il comando che i docs AWS hanno istruito (~/ebdjango $ eb init -p python2.7 django-tutorial), e creando un ambiente passo dopo passo anche. I passi che ho preso nel EB CLI sono i seguenti:

  1. inizializzazione dell'applicazione
    1. eb init
    2. Selezionare una regione predefinita
    3. Inserire Nome dell'applicazione (predefinito utilizzato premendo enter)
    4. Confermato che sto usando Python
    5. Versione di Python selezionata compatibile con il mio ambiente locale
    6. Configurare SSH
  2. Crea Ambiente
    1. eb create
    2. Inserisci nome di un ambiente (predefinito utilizzato premendo enter)
    3. Inserisci prefisso CNAME DNS (di default usata premendo invio)
    4. Select un tipo di bilanciamento del carico (ho selezionato il classico immettendo 1)

Dopo ambiente è creato io uso eb config per aprire file di configurazione di EB per confermare che il percorso al mio WSGI è quello che dovrebbe essere:

aws:elasticbeanstalk:container:python: 
    NumProcesses: '1' 
    NumThreads: '15' 
    StaticFiles: /static/=static/ 
    WSGIPath: path/to/wsgi.py 

Se vengono apportate modifiche, assicurarsi di salvare il file e conferma che tutto è quadruplicato inserendo eb open nel tuo terminale per aprire una finestra del browser usando il nome di dominio specificato nei passaggi precedenti.