我正在尝试使用 nginx 到 uwsgi 到 django 堆栈设置我的服务器,但是在 uwsgi 部分遇到了问题。
当我运行 uwsgi 并在命令行中传入所有参数时,它可以正常工作。我的 uwsgi 调用如下所示:
uwsgi --socket /tmp/uwsgi.sock --chdir ~/web/test.com --wsgi-file ~/web/test.com/store/wsgi.py --virtualenv ~/web/test.com/testenv --chmod-socket=666 --enable-threads
然后我将这些参数复制到如下所示的 ini 文件中:
# django.ini file
[uwsgi]
master = true
socket = /tmp/uwsgi.sock
chmod-socket = 666
chdir = /home/ubuntu/web/test.com
wsgi_file = /home/ubuntu/web/test.com/store/wsgi.py
virtualenv = /home/ubuntu/web/test.com/causumptionenv
vacuum = true
enable-threads = true
但是,当我使用 django.ini 文件运行 uwsgi 时,我得到了这个输出。
[uWSGI] getting INI configuration from django.ini
*** Starting uWSGI 1.9.11 (64bit) on [Fri May 31 14:52:44 2013] ***
compiled with version: 4.6.3 on 30 May 2013 15:40:11
os: Linux-3.2.0-40-virtual #64-Ubuntu SMP Mon Mar 25 21:42:18 UTC 2013
nodename: ip-10-245-64-211
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/ubuntu/web/test.com
detected binary path: /usr/local/bin/uwsgi
your processes number limit is 4594
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 3
Python version: 2.7.3 (default, Aug 1 2012, 05:25:23) [GCC 4.6.3]
Set PythonHome to /home/ubuntu/web/test.com/testenv
Python main interpreter initialized at 0xcb4dd0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 145440 bytes (142 KB) for 1 cores
*** Operational MODE: single process ***
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 15976)
spawned uWSGI worker 1 (pid: 15977, cores: 1)
--- no python application found, check your startup logs for errors ---
最值得注意的是“未加载任何应用程序。进入完全动态模式和未找到 Python 应用程序,请检查启动日志中是否存在错误
所以我的问题是,在命令行上传递参数和通过 ini 文件传递参数有什么区别?
答案1
它是 wsgi-file 而不是 wsgi_file,命令行选项和文件选项始终相同
答案2
aptitude install uwsgi-plugin-python
然后重新启动 uwsgi 你将看到正确的页面。
答案3
为了增加有关 uwsgi 和 django 的整体困惑,这里有一个对我有用的 ini 文件。
它适用于 http 和 http-socket,但不适用于 socket。
它被设计为在目录设置中使用多个设置文件运行,a'la two scoops of django 多个部署文件(这就是我测试的原因)
因此 ---/velocity 是 manage.py 所在的“主”项目目录。/velocity/velocity/settings/dev_settings_chris_l.py 是实际的设置文件
这一切都需要完成,因为您需要能够从 django 代码外部获取正确的设置文件,因此不能在 wsgi.py 或 manage.py(使用 django-admin)内设置 DJANGO_SETTINGS_MODULE 的行
关于此类事情有很多讨论,报告了各种错误消息。希望虽然与问题不完全相关,但可能会对某些人有所帮助。
Django 1.8
[uwsgi]
http-socket = 127.0.0.1:8004
buffer-size = 32768
processes = 4
threads = 2
pythonpath = ..
env = DJANGO_SETTINGS_MODULE=velocity.settings.dev_chris_l
module=velocity.wsgi:application
home = /home/chris/.virtualenvs/velocity
plugin = python,http
show-config
stats = 127.0.0.1:9191
chdir = /home/chris/development/webfuels/velocity
答案4
检查您是否__init__.py
从 Django 应用程序中删除了任何文件。由于 Django 使用它们来了解哪些文件夹是应用程序,因此它们很重要。