我正在尝试在 Ubuntu 12.04 上启动 uWSGI。
在$ sudo service uwsgi start
或 时# uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/file.ini
,我收到以下错误:
opendir(): No such file or directory [uwsgi.c line 471]
第一次调用将此错误记录到 ,/var/log/uwsgi
第二次调用将此错误输出到stdout
。
怎么了?
答案1
尝试strace
该过程:
# strace -f -o ~/uwsgi.trace uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/file.ini
揭示了就在该过程失败退出之前,打开/usr/lib/uwsgi/plugins
失败:
openat(AT_FDCWD, "/usr/lib/uwsgi/plugins", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
因此,创建缺少的目录:# mkdir -p /usr/lib/uwsgi/plugins
然后尝试再次启动 uWSGI。
也就是说,如果你缺少该/usr/lib/uwsgi/plugins
目录,你的 uWSGI 安装很可能无法处理请求。例如,要处理 Python 请求,你需要将# apt-get install uwsgi-plugin-python
其添加plugins = python
到你的应用配置中。
答案2
即使没有安装 python 插件,uwsgi 也可以很好地适用于 Django 应用程序。
mkdir -p /usr/lib/uwsgi/plugins
是解决 uwsgi 启动代码奇怪行为的有效方法。
最令人困惑的是,如果您在命令行和守护进程模式下明确指定配置,uwsgi 就会完美启动。
例如你有:
/etc/uwsgi/apps-available/uwsgi.ini
- 符号链接至
/etc/uwsgi/apps-enabled
然后 make /etc/init.d/uwsgi start uwsgi.ini
- 启动没问题!
/etc/init.d/uwsgi start
- [失败] 没有插件目录存在
希望 uwsgi 开发人员能够修复该问题,或者至少记录适当的错误消息