2017-10-13 2 views
1

ich einen Apache-Server laufen lasse, die einen Rahmen ingeniousÜberschreibungs python3 Standard-Encoder, wenn Apache mit Server

Erste UnicodeDecodeError('ascii' beim Lesen einer Datei mit hebräisch Zeichen genannt dient.

Ich habe gelesen, dass Sie die standardmäßige bevorzugte Kodierung von python3 mit Umgebungsvariablen ändern können.

SetEnv LC_ALL en_US.UTF-8 
SetEnv LANG en_US.UTF-8 
SetEnv LANGUAGE en_US.UTF-8 
SetEnv PYTHONIOENCODING utf8 

und starten Sie den Server mit sudo service httpd restart und immer noch nicht funktioniert:

So habe ich die /etc/httpd/conf/httpd.conf mit dem [setenv] [3] Verfahren bearbeitet.

Ich muss feststellen, dass die Software lokal arbeitet, wenn es nicht mit einem Apache-Server läuft, einfach python3.

locale.getpreferredencoding() ist ANSI_X3.4-1968 nach dem Wechsel

hier ist der Inhalt der /etc/httpd/conf/httpd.conf

ServerRoot "/etc/httpd" 

Listen 80 

Include conf.modules.d/*.conf 

User apache 
Group apache 

ServerAdmin [email protected] 

<Directory /> 
    AllowOverride none 
    Require all denied 
</Directory> 
ErrorLog "logs/error_log" 

LogLevel warn 

<IfModule log_config_module> 
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
    LogFormat "%h %l %u %t \"%r\" %>s %b" common 

    <IfModule logio_module> 
     # You need to enable mod_logio.c to use %I and %O 
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 
    </IfModule> 

    CustomLog "logs/access_log" combined 
</IfModule> 

<IfModule alias_module> 
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 

</IfModule> 


<IfModule mime_module> 
    AddType text/html .shtml 
    AddOutputFilter INCLUDES .shtml 
</IfModule> 


AddDefaultCharset UTF-8 

<IfModule mime_magic_module> 

    MIMEMagicFile conf/magic 
</IfModule> 

EnableSendfile On 

# Supplemental configuration 

LoadModule wsgi_module /usr/lib64/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so 

WSGIScriptAlias/"/usr/bin/inginious-webapp.production" 
WSGIScriptReloading On 

Alias /static/common /usr/lib/python3.5/site-packages/inginious/frontend/common/static/ 
Alias /static/webapp /usr/lib/python3.5/site-packages/inginious/frontend/webapp/static/ 
Alias /static/lti /usr/lib/python3.5/site-packages/inginious/frontend/lti/static/ 

SetEnv LC_ALL en_US.UTF-8 
SetEnv LANG en_US.UTF-8 
SetEnv LANGUAGE en_US.UTF-8 
SetEnv PYTHONIOENCODING utf8 

<Directory "/usr/bin"> 
    <Files "inginious-webapp.production"> 
     Require all granted 
    </Files> 
</Directory> 

<DirectoryMatch "/usr/lib/python3.5/site-packages/inginious/frontend/(.+)/static/"> 
    Require all granted 
</DirectoryMatch> 


IncludeOptional conf.d/*.conf 

wie kann ich debuggen diese weiter?

Antwort

1

lesen:

Dies erklärt, Fragen rund um lang/locale.

Sie verwenden nicht den mod_wsgi-Daemon-Modus, aber Sie sollten als Daemon-Modus die empfohlene Methode sein.

gehen auch die mod_wsgi Dokumentation lesen unter:

+0

Danke für die Antwort. Ich habe keine Kontrolle über den Devops-Teil dieses Projekts, fürchte ich. aber danke für den Tipp bezüglich des Mod_wsgi-Daemon – WebQube

1

Python3 verwendet, was local.getpreferredencoding als die Codierung beim Öffnen von Dateien im Textmodus zurückgibt. Ich würde vorschlagen, eine Protokollierung hinzuzufügen und den Standardcodierungswert zu protokollieren, um zu überprüfen, ob die Umgebung nicht richtig konfiguriert ist.

Es könnte sein, dass irgendwo im Code ein fest codierter Codierungsparameter steht. Können Sie den Stacktrace des Fehlers und den entsprechenden Code anzeigen?

Je nach Bereitstellungsmechanismus kann es sein, dass die SetEnv-Konfiguration nicht an Python übergeben wird. Informationen zu mod_wsgi-Bereitstellungen finden Sie unter http://ericplumb.com/blog/passing-apache-environment-variables-to-django-via-mod_wsgi.html.

Ähnlich wie in diesem Blogbeitrag beschrieben, müssen Sie die Datei inguious-webapp.production Datei ändern, um VVs manuell zu erhalten und festzulegen. Dies ist bereits in der Standardeinstellung inginious-webapp für einige Variablen erfolgt. Hier müsste man insbesondere die PYTHONIOENCODING hinzufügen.

Wenn Sie im Modus mod_wsgi deamon arbeiten, kann dies http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIDaemonProcess.html helfen, insbesondere die Parameter lang oder locale.

+0

locale.getpreferredencoding() ist 'ANSI_X3.4-1968' nach der Änderung. hat die Frage aktualisiert. hart codierte Werte - ich bezweifle es, da es in meinem lokalen Rechner gut läuft – WebQube

+0

Offensichtlich machen die Einstellungen env es nicht in Pythons Kontext. Welche Bereitstellungsmethode verwenden Sie, mod_wsgi? – Bernhard

+0

Woher weiß ich das? Welche Bereitstellung? – WebQube