2017-03-13 2 views
0

Mein 'controller.py' SkriptApache2 whith mod_wsgi python3 'Typeerror: und zurück Fehler 500

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import os 

def application(environ, start_response): 
    # the ouput string to respuesta var 
    respuesta = "<p>Página web construida con <strong>Python!!!</strong></p>" 
    # generating the response OK 
    start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) 
    return respuesta 

In 'error.log':

[Mon Mar 13 12:36:32.656669 2017] [wsgi:error] [pid 28767:tid 139926041507584] [client 127.0.0.1:56382] mod_wsgi (pid=28767): Exception occurred processing WSGI script '/var/www/python/app/controller.py'. [Mon Mar 13 12:36:32.656761 2017]

[wsgi:error] [pid 28767:tid 139926041507584] [client 127.0.0.1:56382] TypeError: sequence of byte string values expected, value of type str found [email protected]---:/var/www/python/logs$ TypeError: sequence of byte string values expected, value of type str found

Ich habe this questions lesen, aber die Antwort funktioniert nicht.

mein site.conf

<VirtualHost *:80> 

    ServerName app.salvaj.es 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/python/static 
    WSGIScriptAlias//var/www/python/app/controller.py 

    ErrorLog /var/www/python/logs/error.log 
    CustomLog /var/www/python/logs/access.log combined 

    <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
    </Directory> 
    <Directory /var/www/python/static> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride None 
      Order allow,deny 
      allow from all 
    </Directory> 

</VirtualHost> 
+0

Hast du den mod-wsgi installiert? sudo aptitude installieren libapache2-mod-wsgi –

+0

@PierangeloOrizio ja, und aktiviert mit 'sudo a2enmod wsgi' – Trimax

+0

Können Sie die virtuelle Host-Konfiguration? domain.conf –

Antwort

2

Sie zwei Dinge falsch machen.

Die erste ist, dass die Antwort ein Byte über Bytes, nicht Unicode sein muss.

Der zweite ist, dass Sie eine Zeichenfolge zurückgeben, anstatt eine Liste von Zeichenfolgen. Letzteres macht Ihren Code sehr ineffizient, da jeweils ein einzelnes Zeichen zurückgeschickt wird.

Verwendung:

return [respuesta.encode('UTF-8')] 

Noch besser ist es, nicht schreiben WSGI Anwendungen von Grund auf selbst, ein Web-Framework wie Fläschchen verwenden, wie es all diese Art von Details für Sie behandelt.

+0

das funktioniert! Ja, ich werde Flask benutzen, aber zuerst habe ich versucht zu lernen, wie es ohne Rahmen funktioniert. – Trimax

+0

Sie sind besser dran mit Flask und nur wenn es nötig ist, dann lernen Sie über rohe WSGI. Es gibt zu viele Fehler in roher WSGI und es ist kein guter Ort, um zu lernen. –