2017-09-22 2 views
0

Ich habe den folgenden Code überprüft die Standardcodierung für Lese Dateien bekam (ich bin auf Linux, Ubuntu 16 x 64), nur zum Testen:Apache -> Ruby-locale

File.read("/bin/ls").encoding 

Wenn Apache rufe meinen Code über FastCGI ist die Ausgabe US_ASCII (C locale), aber wenn ich meinen Code von irgendwo im System manuell ausführen lasse, bekomme ich en_US.UTF-8 encoding.

Das Ändern der LANG-Umgebungsvariablen in/etc/apache2/envvars hat keine Auswirkungen. Das Ändern der ENV-Konfiguration in /etc/init.d/apache2 erfolgt ebenfalls nicht (nach dem Neustart des Dienstes natürlich)./etc/default/locale ist auf en_US.UTF-8 eingestellt. Das Spielen mit dem virtuellen Host in meiner Conf-Datei und das Hinzufügen von Standard-Charsets hilft ebenfalls nicht.

Die Überprüfung des ENV-Arrays, wenn es von Apache aufgerufen wird, ist fast leer (nur die PATH-Variable ist gesetzt), während die Überprüfung bei manueller Ausführung voller Variablen wie LANG usw. ist.

Es gibt ein externes GEM, das ich für mein Projekt verwende und es hat einen Fehler, wenn es in einer Nicht-Unicode-Umgebung ausgeführt wird. Ich könnte es manuell patchen, aber es ist keine gute Lösung, weil ein Update es überschreiben wird.

Wie kann ich Apache dazu bringen, meinen Code in einer Unicode-Umgebung aufzurufen?

+0

Inzwischen bekam ich eine Antwort. Lösung ist hier, es ist gelöst: https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv – log69

+0

Wenn Sie Ruby verwenden, dann ist FastCGI das * letzte * was Sie verwenden sollten. Pakete wie [Sinatra] (http://www.sinatrarb.com) machen das Schreiben einfacher HTTP-Dienste super einfach und [Passenger] (https://www.phusionpassenger.com) ist ein Modul, das Apache httpd (oder Nginx!) Führen Sie Ruby viel effizienter als über FastCGI. – tadman

+0

Wenn Sie Ihr Problem lösen, ist es immer eine Selbstantwort wert, um anderen zu helfen. Der Kommentar dort markiert dies nicht als "gelöst", eine angenommene Antwort. – tadman

Antwort

Verwandte Themen