为什么Dancer app在uWSGI + Apache下失败?

时间:2016-01-19 00:46:29

标签: apache perl uwsgi dancer psgi

我的Dancer应用程序在uWSGI(2.0.7)+ Apache(2.4.10)组合下失败,而它在其他环境中自由运行(uWSGI + nginx,Starman + Apache,Dancer自己的开发服务器)。我没有在日志中找到任何有意义的信息。所以我制作了简单的测试应用程序,如

$ dancer -a tset

然后将默认production.yml复制到uwsgi.yml,将bin/app.pl链接到bin/app.psgi创建tset.ini,如下所示:

[uwsgi]                                                                                                                                                                             
plugins   = psgi                                                                                                                                                                    
socket    = 127.0.0.1:3033                                                                                                                                                          
uid       = www                                                                                                                                                                     
gid       = www-data                                                                                                                                                                
chdir     = /home/www/apps/tset/bin/                                                                                                                                                
psgi      = app.psgi                                                                                                                                                                
processes = 1                                                                                                                                                                       
master    = true  

/etc/uwsgi/apps-available中为uWsgi提供此ini,并将其链接到/etc/uwsgi/apps-enabled

重新启动uwsgi服务。

然后对于Apache(2.4.10)模块mod-proxy-uwsgi在我的虚拟主机配置中添加了几行:

ProxyPass /adm/y uwsgi://127.0.0.1:3033/

这似乎是最脆弱的一点,因为我觉得我需要在这里设置uWSGIModifier1 5但是没有弄清楚在哪里和如何?

重新启动Apache并出现“内部服务器错误”。在uwsgi日志中我只看到:

Tue Jan 19 02:10:36 2016 - spawned uWSGI worker 1 (pid: 21712, cores: 1)
Tue Jan 19 02:10:56 2016 - -- unavailable modifier requested: 0 --
Tue Jan 19 02:24:44 2016 - -- unavailable modifier requested: 0 --
Tue Jan 19 02:27:14 2016 - -- unavailable modifier requested: 0 --
Tue Jan 19 02:27:17 2016 - -- unavailable modifier requested: 0 --

这是什么“请求的不可用修饰符”?

在apache error.log中没有条目,access.log是条目,但没有其他信息而不是状态500.

这种行为可以通过上述步骤重现,所以我希望你弄明白,这个组合有什么问题?

1 个答案:

答案 0 :(得分:4)

  

我觉得我需要在这里设置uWSGIModifier1 5但是没有弄清楚在哪里和如何?

是的,你是对的。你应该将modifier1设置为5,但uwsgi docs说明mod_proxy_uwsgi:

  

目前该模块缺乏设置修饰符的功能,但很快就会修复。

这意味着,您无法使用此方法将修饰符传递给uWSGI实例(如果未提供,则uWSGI将使用修饰符0)

要解决该问题,您可以使用以下命令移至mod_uwsgi或更改加载psgi的修饰符:

plugins   = 0:psgi

而不是

plugins   = psgi