我试图build立一个厨师的食谱,将让我的网站运行,似乎一切都工作正常,除了uWSGI这给我以下错误:
*** has_emperor mode detected (fd: 6) *** [uWSGI] getting INI configuration from app-cms.ini removed uwsgi instance app-cms.ini
不再说这个:
open("/var/www/app-cms/logs/uwsgi.log"): Permission denied [utils.c line 246]
该日志文件现在正在创build并包含以下内容:
*** Starting uWSGI 1.0.3-debian (64bit) on [Thu Feb 6 12:00:43 2014] *** compiled with version: 4.6.3 on 17 July 2012 02:26:54 current working directory: /etc/uwsgi/apps-enabled writing pidfile to /var/www/ediflo-cms/run/ediflo-cms.pid detected binary path: /usr/bin/uwsgi-core setgid() to 33 setuid() to 33 chdir(): Permission denied [uwsgi.c line 1723] chdir(): Permission denied [uwsgi.c line 975]
我不知道在哪里尝试chdir() 。
我在emperor模式下启动uWSGI ,并使用下面的upstartconfiguration文件来监视/etc/uwsgi/apps-enabled/ ini文件:
description "uWSGI" start on runlevel [2345] stop on runlevel [06] respawn exec uwsgi --emperor /etc/uwsgi/apps-enabled --uid uwsgi --gid www-data --logto /var/log/uwsgi/uwsgi.log
这是我的uWSGI应用程序configuration:
[uwsgi] ; define variables to use in this script ; process name for easy identification in top project = app-cms base_dir = /var/www/app-cms chdir = %(base_dir) pythonpath = %(base_dir)/env/bin uid = www-data gid = www-data procname = %(project) ; This value needs to be tuned workers = 4 ; Create pid file for easier process management pidfile = %(base_dir)/run/%(project).pid ; Specify your app here module = %(project)-wsgi:application log-reopen = true logto = %(base_dir)/logs/uwsgi.log chmod-socket = 660 vacuum = True enable-threads = True ; unix socket socket = /tmp/app-cms-server.sock ; Enable stats stats = /tmp/app-cms-stats.sock
如果皇帝作为未经授权的用户运行,那么封臣不能下降到一个特定的uid和gid,而更重要的master-root根本没有意义(使用它通常是一个坏主意,这里只适用于需要访问硬件的具体function)。
检查一个/var/www/app-cms/logs/uwsgi.log是否已经存在并被root所有,很可能是前一次尝试的结果,现在非特权进程无法在写入模式下访问它。
最后,不要将Emperor和vassals映射到同一个日志文件中,因为文件描述符2是被inheritance的,所以它是隐含的,如果这个vassal拥有与Emperor不同的权限,它可能会导致各种问题(这不是你的情况)