2017-01-20 6 views
0

У меня есть приложение django, размещенное на AWS, и убирают некоторые аспекты структуры проекта. Одна из этих очистки включала удаление родительской папки в корневом каталоге и помещение моего файла appspec.yml (используемого для CodeDeploy) в папку с документами. Так что я буду от этого:Nginx Bad Gateway после изменения структуры проекта

myproject/ appspec.yml myproject/ requirements/ docs/ myproject/ manage.py myproject/ __init__.py urls.py wsgi.py settings/ myproject/ __init__.py myproject.py

Для этого:

myproject/ appspec.yml requirements/ docs/ myproject/ manage.py myproject/ __init__.py urls.py wsgi.py settings/ myproject/ __init__.py myproject.py

Я сделал следующее до перезагрузки экземпляра:

  1. Изменено gunicorn.conf расположение от root /var/www/myproject/myproject/myproject/myproject к root /var/www/myproject/myproject/myproject
  2. Изменено nginx.conf расположение от root /var/www/myproject/myproject/myproject/myproject к root /var/www/myproject/myproject/myproject

Я теперь видим 502 BAD GATEWAY, когда я пытаюсь получить доступ к своему веб-сайт URL и видеть failed (104: Connection reset by peer) while reading response header from upstream при взгляде на Nginx error.log.

Это явно произошло потому, что я перепутал с проектными каталогами. Я пропустил что-то еще, что нужно изменить или это была просто плохая идея сменить каталоги в первую очередь?

Текущий nginx.conf

server { 
    listen 80; 
    server_name www.myproject.co; 
    return 301 http://myproject.co$request_uri; 
} 

server { 
    listen 80; 
    server_name myproject.co; 

    ##Deny illegal Host headers 
    if ($host !~* ^(myproject.co)$) { 
     return 444; 
    } 

    location = /favicon.ico { access_log off; log_not_found off; } 
    location /static/ { 
     root /var/www/myproject/myproject/myproject; 
    } 
    location /media/ { 
     root /var/www/myproject/myproject/myproject; 
    } 


    location/{ 
     include proxy_params; 
     proxy_pass http://127.0.0.1:8000; 
    } 
} 

Текущий gunicorn.conf

description "Gunicorn application server handling myproject" 

start on runlevel [2345] 
stop on runlevel [!2345] 

respawn 
setuid ubuntu 
setgid ubuntu 
chdir /var/www/myproject/myproject/myproject 

exec /usr/local/bin/gunicorn --workers 3 myproject.wsgi:application --env SECRET_KEY="" 

Traceback Ошибка

Когда я бегу exec /usr/local/bin/gunicorn --workers 3 myproject.wsgi:application --env SECRET_KEY="", я получаю следующее сообщение об ошибке:

exec /usr/local/bin/gunicorn --workers 3 myproject.wsgi:application --env SECRET_KEY="f15a4d7s4bec9cnlw24sw2lj4ften12nu3e4cx3z1utqgajp87" 
[2017-01-20 16:02:49 +0000] [9809] [INFO] Starting gunicorn 19.4.5 
[2017-01-20 16:02:49 +0000] [9809] [INFO] Listening at: http://127.0.0.1:8000 (9809) 
[2017-01-20 16:02:49 +0000] [9809] [INFO] Using worker: sync 
[2017-01-20 16:02:49 +0000] [10039] [INFO] Booting worker with pid: 10039 
[2017-01-20 16:02:49 +0000] [10039] [ERROR] Exception in worker process: 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker 
    worker.init_process() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process 
    self.load_wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi 
    self.wsgi = self.app.wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi 
    self.callable = self.load() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load 
    return self.load_wsgiapp() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
    return util.import_app(self.app_uri) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app 
    __import__(module) 
    File "/var/www/myproject/myproject/myproject/myproject/__init__.py", line 5, in <module> 
    from .myproject import app as celery_app 
ImportError: cannot import name app 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker 
    worker.init_process() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process 
    self.load_wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi 
    self.wsgi = self.app.wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi 
    self.callable = self.load() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load 
    return self.load_wsgiapp() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
    return util.import_app(self.app_uri) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app 
    __import__(module) 
    File "/var/www/myproject/myproject/myproject/myproject/__init__.py", line 5, in <module> 
    from .myproject import app as celery_app 
ImportError: cannot import name app 
[2017-01-20 16:02:49 +0000] [10039] [INFO] Worker exiting (pid: 10039) 
[2017-01-20 16:02:49 +0000] [9809] [INFO] Shutting down: Master 
[2017-01-20 16:02:49 +0000] [9809] [INFO] Reason: Worker failed to boot. 

/var/www/myproject/myproject/myproject/myproject/myproject.py

from __future__ import absolute_import 

import os 
from os.path import abspath, dirname 
from sys import path 
SITE_ROOT = dirname(dirname(abspath(__file__))) 
path.append(SITE_ROOT) 

from celery import Celery 

# set the default Django settings module for the 'celery' program. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', "settings.production") 

from django.conf import settings 

app = Celery('myproject') 

path.append('/var/www/myproject/myproject/myproject') 
# Using a string here means the worker will not have to 
# pickle the object when using Windows. 
app.config_from_object('django.conf:settings') 

# load task modules from all registered Django app configs. 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

/var/www/myproject/myproject/myproject/myproject/__init.py__

from __future__ import absolute_import 

# This will make sure the app is always imported when 
# Django starts so that shared_task will use this app. 
from .myproject import app as celery_app 

# __all__ = ['celery_app'] 

Ошибка после того, как закомментировать `из .myproject приложения импорта в celery_app:

[2017-01-20 18:13:49 +0000] [1411] [INFO] Starting gunicorn 19.4.5 
[2017-01-20 18:13:49 +0000] [1411] [INFO] Listening at: http://127.0.0.1:8000 (1411) 
[2017-01-20 18:13:49 +0000] [1411] [INFO] Using worker: sync 
[2017-01-20 18:13:49 +0000] [1439] [INFO] Booting worker with pid: 1439 
[2017-01-20 18:13:49 +0000] [1439] [ERROR] Exception in worker process: 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker 
    worker.init_process() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process 
    self.load_wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi 
    self.wsgi = self.app.wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi 
    self.callable = self.load() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load 
    return self.load_wsgiapp() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
    return util.import_app(self.app_uri) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app 
    __import__(module) 
ImportError: No module named myproject.wsgi 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker 
    worker.init_process() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process 
    self.load_wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi 
    self.wsgi = self.app.wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi 
    self.callable = self.load() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load 
    return self.load_wsgiapp() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
    return util.import_app(self.app_uri) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app 
    __import__(module) 
ImportError: No module named myproject.wsgi 
[2017-01-20 18:13:49 +0000] [1439] [INFO] Worker exiting (pid: 1439) 
[2017-01-20 18:13:49 +0000] [1411] [INFO] Shutting down: Master 
[2017-01-20 18:13:49 +0000] [1411] [INFO] Reason: Worker failed to boot. 

Похоже, что теперь у пушки есть трудности с поиском каких-либо модулей.

+0

Есть ли у вас какая-то отладочная информация о том, какая ошибка произошла за занавеской? под этим я имею в виду журнал ошибок от пушки. –

+0

Недавно добавила информацию о некорректных деталях, может быть, это как-то связано с сельдереем? – wraasch

+0

Да, вам нужно изучить эту ошибку импорта. Может быть, удалить относительный импорт в __init__.py? поскольку он не может импортировать, gunicorn не может запустить код python, поэтому nginx не может подключиться к нему, и вы получите 502. –

ответ

0

Оказалось, что gunicorn.conf не указывал на каталог с manage.py. Поэтому я изменил его на:

description "Gunicorn application server handling myproject" 

start on runlevel [2345] 
stop on runlevel [!2345] 

respawn 
setuid ubuntu 
setgid ubuntu 
chdir /var/www/myproject/myproject 

exec /usr/local/bin/gunicorn --workers 3 myproject.wsgi:application --env SECRET_KEY="" 

Какая проблема решена.См. Django Docs - How to use Django with Gunicorn, в котором говорится, что ваш проект должен находиться на пути Python; простейший способ обеспечить запуск этой команды из того же каталога, что и файл manage.py.