Gunicorn,没有名为“myproject”的模块

我正在一个新的服务器上安装一个以前build立的网站。 我不是最初的开发者。

过去我使用过Gunicorn + nginx来使应用程序保持活跃(基本上遵循本教程 ),但在这里遇到问题。

source venv/bin/activate ,然后./manage.py runserver 0.0.0.0:8000运作良好,一切都按预期运行。 我closures它并运行gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application ,并得到以下内容:

 [2016-09-13 01:11:47 +0000] [15259] [INFO] Starting gunicorn 19.6.0 [2016-09-13 01:11:47 +0000] [15259] [INFO] Listening at: http://0.0.0.0:8000 (15259) [2016-09-13 01:11:47 +0000] [15259] [INFO] Using worker: sync [2016-09-13 01:11:47 +0000] [15262] [INFO] Booting worker with pid: 15262 [2016-09-13 01:11:47 +0000] [15262] [ERROR] Exception in worker process Traceback (most recent call last): File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker worker.init_process() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process self.load_wsgi() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi self.wsgi = self.app.wsgi() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load return self.load_wsgiapp() File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp return util.import_app(self.app_uri) File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app __import__(module) ImportError: No module named 'myproject.wsgi' [2016-09-13 01:11:47 +0000] [15262] [INFO] Worker exiting (pid: 15262) [2016-09-13 01:11:47 +0000] [15259] [INFO] Shutting down: Master [2016-09-13 01:11:47 +0000] [15259] [INFO] Reason: Worker failed to boot. 

我相信这与整个应用程序的结构有关。 之前,我已经构build了具有以下基本结构的应用程序:

 myproject ├── manage.py ├── myproject │  ├── urls.py │  ├── views.py │  ├── component1 │ │  ├── urls.py │ │  └── views.py │  ├── component2 │ │  ├── urls.py │ │  └── views.py ├── venv │  ├── bin │  └── ... 

相反,这个结构是这样的:

 myproject ├── apps │  ├── blog │ │  ├── urls.py │ │  ├── views.py │  │ └── ... │  ├── catalogue │ │  ├── urls.py │ │  ├── views.py │  │ └── ... │  ├── checkout │ │  ├── urls.py │ │  ├── views.py │  │ └── ... │  ├── core │ │  ├── urls.py │ │  ├── views.py │  │ └── ... │  ├── customer │  ├── dashboard │  └── __init__.py ├── __init__.py ├── manage.py ├── project_static │  ├── assets │  ├── bower_components │  └── js ├── public │  ├── emails │  ├── media │  └── static ├── settings │  ├── base.py │  ├── dev.py │  ├── __init__.py │  ├── local.py │  └── production.py ├── templates │  ├── base.html │  ├── basket │  ├── blog │  └── .... ├── urls.py ├── venv │  ├── bin │  ├── include │  ├── lib │  ├── pip-selfcheck.json │  └── share └── wsgi.py 

所以,没有一个主要的模块正在运行,这正是我期望gunicorn正在寻找的。

有什么想法吗?

wsgi.py

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

你的错误信息是

 ImportError: No module named 'myproject.wsgi' 

你运行的应用程序

 gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application 

而wsgi.py有线

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

这是断开连接。 为了将项目识别为myproject.wsgi目录必须位于python路径…正在运行

 cd .. && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application 

会消除这个错误。 然而,你会得到一个不同的错误,因为wsgi.py文件引用settings而不是myproject.settings 。 这意味着该应用程序的目的是从根目录而不是一个目录运行。 您可以通过查看代码来确定这一点 – 如果它使用绝对导入,他们通常是from myproject.app import ...还是from app import ... 如果这个猜测是正确的,你的正确的命令是

 gunicorn --bind 0.0.0.0:8000 wsgi:application 

如果应用程序在所有路径中都使用myproject ,则必须修改您的PYTHONPATH才能正确运行它…

 PYTHONPATH=`pwd`/.. gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application