2016-10-27 5 views
0

Ich versuche, eine web.py Anwendung auf meinem Apache-Server zu starten. Aber ich habe einen Wsgi-Fehler erhalten, wenn ich versuche, einen REST-Dienst aufzurufen. Unter meinem Code:Kann Web.py-Anwendung nicht aufrufen: wsgifunc() fehlgeschlagen

[Thu Oct 27 15:54:28.614753 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: Traceback (most recent call last):, referer: http://test.dial.uclouvain.be/swagger/ 
[Thu Oct 27 15:54:28.614841 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: File "/var/www/html/api/dilbert/api.py", line 377, in <module>, referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.614856 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215:  application.run(), referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.614877 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] AH01215: AttributeError: 'function' object has no attribute 'run', referer: http://localhost/swagger/ 
[Thu Oct 27 15:54:28.636844 2016] [cgi:error] [pid 2979] [client 130.104.xxx.xxx:62194] End of script output before headers: api.py, referer: http://localhost/swagger/ 

Wenn ich nur es funktioniert "web.application(urls, globals())" verwenden:

urls = (
    '/publication/(.*)', 'PublicationStats', 
    '/author/(.*)', 'AuthorStats', 
    '/department/(.*)', 'DepartmentStats' 
) 
application = web.application(urls, globals()).wsgifunc() 
... 
if __name__ == "__main__": 
    #web.config.debug = True 
    application.run() 

Als ich versuchte, meinen REST api wie /author/Smith, John zu nennen, mein Apache-Server einen seltsamen Fehler über wsgi erzeugen. Aber ich muss wsgifunc verwenden, weil ich auf web.ctx.env variable zugreifen muss.

mod_wsgi ist gut auf Apache installiert. Es scheint gut zu funktionieren ... ich hoffe.
Danke für Ihre Hilfe

Renaud

+0

Das klingt für mich wie der entsprechende Handler für das Skript nicht verwendet wird . Haben Sie in Ihrer '.htaccess' Datei' SetHandler wsgi-script' für dieses Skript? – sytech

Antwort

0

Base auf @sytech Vorschlag, ich meine Apache-Konfiguration wie folgt aktualisiert:

<IfModule wsgi_module> 
    WSGIApplicationGroup %{GLOBAL} 
    WSGIScriptAlias /api/dilbert /var/www/html/api/dilbert/api.py/ 
    WSGIPythonPath /var/www/html/api/dilbert 

    <Directory /var/www/html/api/> 
    Order deny,allow 
    Allow from all 
    <Files *.py> 
     SetHandler wsgi-script 
     Options ExecCGI FollowSymLinks 
    </Files> 
    </Directory> 
</IfModule> 
+1

Möglicherweise ist das egal, obwohl das Routing Ihrer Anwendung verwirren könnte, aber Sie hätten normalerweise kein abschließendes Schrägstrich für das letzte Argument von '' WSGIScriptAlias''. Die Anweisungen 'SetHandler wsgi-script'' und' Options'' in diesem Kontext sollten nicht benötigt werden. Ein wahrscheinlicheres Problem ist, dass Ihre Haupt-Apache-Konfiguration ".py" zu "cgi-script" zugeordnet hat. Es ist besser, '' api.py'' in '' api.wsgi'' umzubenennen und '' WSGIScriptAlias'' zu ändern. Es ist dumm, dass einige Distributionen mit '' py'' zu '' cgi-script'' gehören. –

Verwandte Themen