25

Próbowałem od kilku dni skonfigurować Django w ramach Elastic Beanstalk Amazon Web Services. Myślę, że problem mam trafienia jest taka:Konfigurowanie Django na AWS Elastic Beanstalk: WSGIPath nie został znaleziony

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

I przestrzegać samouczek here i wszystko idzie dobrze aż do końca etapu 6, ale nie mogę dla życia mnie dostać wszystko, aby wyświetlić inne niż ogólna strona Elastic Beanstalk z kroku 5, nr 2. Kiedy uruchamiam

./manage.py runserver 

na moim komputerze lokalnym, wszystko działa tak jak powinno, ale nie mogę dostać, że strona do wdrożenia. Najpierw próbowałem z małą stroną Django, którą sam napisałem. To nie zadziałało, więc usunąłem wszystko, co zrobiłem i spróbowałem ponownie, co nie działało, więc usunąłem to wszystko i spróbowałem ponownie z nową instalacją django. Próbowałem tego kilka razy bawiąc się małymi rzeczami, ale myślę, że brakuje mi czegoś poważnego.

Dodałem plik python.config zgodnie z opisem w this tutorial.

Oto moja struktura plików:

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

Z mojego settings.py:

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

Tutaj jest 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> 

Czy istnieje inne miejsce, muszę definiować moje WSGIPath? Czy istnieje sposób, aby to zrobić za pomocą konsoli AWS? Czy powinienem pominąć EB i użyć EC2 bezpośrednio?

+6

Ten problem został rozwiązany zgodnie z [tutaj] (https://forums.aws.amazon.com/thread.jspa?messageID=396656񠵰). Zapisałem cały kod w jednym katalogu i spakowałem (i przesłałem) cały katalog.Powinienem był spakować wszystkie odpowiednie pliki w tym katalogu, a nie sam katalog, więc po rozpakowaniu wszystkie pliki znajdą się w katalogu głównym witryny. Mam nadzieję, że to pomoże komuś innemu z tym samym problemem. Wydaje mi się, że natrafiłem na ten sam problem z przesyłaniem przez GUI i przez git. – Xephryous

+2

Nie powinieneś edytować pytania, ale dodaj własną odpowiedź i ją zaakceptuj. – bikeshedder

+0

Należy wziąć pod uwagę, że niezatwierdzone zmiany nie zostaną wdrożone, więc powinieneś mieć wszystkie zmiany w folderze ".ebextensions" zatwierdzonym w celu wdrożenia go z interfejsem EB CLI. – nisevi

Odpowiedz

13

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

Katalog „.ebextensions” musi znajdować się w katalogu głównym na poziomie aplikacji, ale z wyjścia dziennika, katalog jest zamiast w «.ebextensions mysite /» katalogu. Tak na przykład po wykonaniu samouczek django w docs po uruchomieniu „git aws.push” Twój katalog główny będzie wyglądać następująco:

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

Zamiast tego:

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

To jest ten! Właściwie odpowiedziałem na moje własne pytanie w komentarzu [tutaj] (http://stackoverflow.com/questions/13102076/setting-up-django-on-aws-elastic-beanstalk-wsgipath-not-found/17711770?iemail=1&noredirect = 1 # comment17943273_13102076). Myślę, że nie miałem wystarczająco dużo reputacji, aby odpowiedzieć w tym czasie lub coś takiego. W każdym razie problem został rozwiązany. – Xephryous

+1

Wystąpił problem z zainstalowanym programem psycopg2. dodanie tych linii do pliku .ebextensions/01-app.config poprawiono: pakiety: mniam: Postgresql93-devel: [] –

8

Znajdź .elasticbeanstalk/optionsettings.your-app-name w katalog główny aplikacji. Wyszukaj WSGIPath i upewnij się, że jest to ścieżka, którą zamierzasz. Wygląda na to, że domyślnie jest to application.py.

+0

Jaka jest ścieżka względem? Również skrypt 'eb' wydaje się nadpisywać wartość, którą tam wstawiam. – Mikhail

1

OK, oto, co sprawdziło się po wypróbowaniu milionów rzeczy. Musisz uruchomić eb update, aby zaktualizować środowisko.

Więc upewnij .elasticbeanstalk/optionsettings.whatever-env ma WSGIPath ustawiony na co chcesz, i upewnij się, że ma to .ebextensions/whatever.config:

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

Następnie uruchom eb update i powinien praca. Pamiętaj, że musisz ustawić alias, aby upewnić się, że polecenie eb faktycznie działa.Na przykład:

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

Wierzę, że 'aktualizacja eb' została ostatnio zmieniona na' eb wdrożyć'. Może to być przydatne dla osób poszukujących tego rodzaju informacji w 2016 roku :) – Vlad

1

miałem ten sam problem ("Twój WSGIPath odnosi się do pliku, który nie istnieje"), i wreszcie znalazł rozwiązanie:

Uwaga: Najpierw szukałem w niewłaściwym kierunku, ponieważ EB również wyświetlał ten komunikat: Wystąpił błąd podczas kompilacji: Polecenie 01_migrate nie powiodło się.. Tak więc, chociaż pliki, w tym * .config, zostały poprawnie zlokalizowane.

2

Miałem ten sam problem po przejściu przez dokumenty AWS do kropki. To, co zrobiłem, aby tego uniknąć, krok po kroku zainicjować aplikację za pomocą interfejsu EB CLI, bez używania polecenia instruktorów AWS (~/ebdjango $ eb init -p python2.7 django-tutorial) i tworzenia środowiska krok po kroku także. Kroki brałem w EB CLI są następujące:

  1. Initialize Zastosowanie
    1. eb init
    2. Wybierz domyślny obszar
    3. Wprowadź nazwę aplikacji (używany domyślnie naciskając Enter)
    4. Potwierdzony używam Pythona
    5. Wybraną wersję Pythona zgodną z moim lokalnym środowiskiem
    6. Konfiguracja ssh
  2. Tworzenie środowiska
    1. eb create
    2. Wprowadź nazwę środowiska (używany domyślnie naciskając enter)
    3. Enter DNS CNAME prefiks (używany domyślnie przez naciśnięcie klawisza Enter)
    4. Select typ load balancera (wybrałem klasyczny przez wpisanie 1)

Po Środowiska jest tworzony używam eb config otworzyć plik konfiguracyjny EB, aby potwierdzić, że droga do mojego WSGI jest to, co powinno być:

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

przypadku jakichkolwiek zmian, upewnij się, zapisać plik i potwierdź, że wszystko jest wyrównane, wprowadzając w terminalu eb open, aby otworzyć okno przeglądarki, używając nazwy domeny podanej we wcześniejszych krokach.