2017-01-20 7 views
0

私はAWSでホストされているdjangoアプリを持っており、プロジェクト構造のいくつかの面を整理しています。これらのクリーンアップの1つには、ルートディレクトリの親フォルダを削除し、CodeDeployで使用されているappspec.ymlファイルをdocsのフォルダに置くことが含まれていました。私は、次の前に、インスタンスを再起動に行われたプロジェクト構造を変更した後のNginx Bad Gateway

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

  1. root /var/www/myproject/myproject/myproject/myprojectからのgunicorn.conf場所を変更。これに

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

    :だから私はこのことからつもりですroot /var/www/myproject/myproject/myproject

  2. は、私は私のウェブサイトのURLにアクセスしようとnginxのerror.logを見たときにfailed (104: Connection reset by peer) while reading response header from upstreamを見たとき、私は今502 BAD GATEWAYを見ていroot /var/www/myproject/myproject/myproject/myprojectからroot /var/www/myproject/myproject/myproject

からnginx.conf場所を変更しました。

これは明らかに私がプロジェクトディレクトリを混乱させたために起こりました。私は変更が必要な何かを忘れてしまったのですか、最初にディレクトリを変更するのは悪い考えですか?

現在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="" 

トレースバックエラー

私は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__ celery_appとして.myproject輸入アプリから `コメントアウトした後

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'] 

エラー:

[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ファイルと同じディレクトリからこのコマンドを実行することです。

関連する問題