Goo*_*dea 39 python django nginx gunicorn
我正在新服务器上安装以前构建的网站.我不是原来的开发者.
我过去使用了Gunicorn + nginx来保持应用程序的活着(基本上遵循本教程),但我在这里遇到问题.
我source venv/bin/activate
,然后./manage.py runserver 0.0.0.0:8000
运作良好,一切都按预期运行.我将其关闭并运行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.
Run Code Online (Sandbox Code Playgroud)
我认为它与整个应用程序的结构有关.之前,我已经构建了具有以下基本结构的应用程序:
myproject
??? manage.py
??? myproject
? ??? urls.py
? ??? views.py
? ??? component1
? ? ??? urls.py
? ? ??? views.py
? ??? component2
? ? ??? urls.py
? ? ??? views.py
??? venv
? ??? bin
? ??? ...
Run Code Online (Sandbox Code Playgroud)
相反,这个结构如下:
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
Run Code Online (Sandbox Code Playgroud)
因此,没有"主要"模块运行该节目,这是我所期待的gunicorn正在寻找的.
有什么想法吗?
wsgi.py:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
Pau*_*tte 54
您的错误消息是
ImportError: No module named 'myproject.wsgi'
Run Code Online (Sandbox Code Playgroud)
你运行了应用程序
gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
Run Code Online (Sandbox Code Playgroud)
并且wsgi.py有这条线
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
Run Code Online (Sandbox Code Playgroud)
这是断开连接.为了认识该项目作为myproject.wsgi
的父目录必须是python的路径上运行...
cd .. && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
Run Code Online (Sandbox Code Playgroud)
会消除这个错误.但是,您将获得不同的错误,因为wsgi.py文件引用settings
而不是myproject.settings
.这意味着该应用程序旨在从根目录而不是一个目录运行.您可以通过查看代码来确定这一点 - 如果它使用绝对导入,他们通常会说from myproject.app import ...
或from app import ...
.如果猜测正确,那么你的正确命令就是
gunicorn --bind 0.0.0.0:8000 wsgi:application
Run Code Online (Sandbox Code Playgroud)
如果应用程序确实myproject
在所有路径中使用,则必须修改PYTHONPATH以正确运行它...
PYTHONPATH=`pwd`/.. gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
Run Code Online (Sandbox Code Playgroud)
小智 6
就我而言,\n我的项目结构是
\nmyproject\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 manage.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 myproject\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 wsgi.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ..\nDockerfile\ndocker-composer.yml\n
Run Code Online (Sandbox Code Playgroud)\n所以在 docker-composer.yml 中,当命令
\n\n\nGunicorn myproject.wsgi:application --bind 0.0.0.0:8000
\n
我收到以下错误
\n\n\nModuleNotFoundError:没有名为“myproject.wsgi”的模块
\n
我们要做的是,我们必须在文件夹中运行gunicorn命令,而不是项目根目录。这是工作代码
\nsh -c "cd ./myproject && gunicorn myproject.wsgi:application --bind 0.0.0.0:8000"\n
Run Code Online (Sandbox Code Playgroud)\n在gunicorn命令之前,我们必须使用“cd ./project”更改目录。在“myproject”目录下,gunicorn可以清楚地识别我们的项目。
\n 归档时间: |
|
查看次数: |
39111 次 |
最近记录: |