Apache -> Ruby locale?

Fórumok

Sziasztok, adott az alábbi kódom, ez kiírja hogy milyen karakter kódolással olvassa be alapértelmezetten a fájlokat a program:

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

Ha Apache hívja meg az FCGI-s kódom, akkor mindig US-ASCII (vagyis C) locale van. Ha bárhonnét másholról futtatom a kódot, akkor UTF-8.

/etc/apache2/envvars fájlban van egy ilyen sor: export LANG=C - viszont ennek átírása nem segít (en_US.UTF-8 értékkel próbálkoztam, ez kellene).

Ruby-n belül tudok kódolást váltani, ezzel nem lenne gond. Csak van egy GEM modul ami külső fejlesztés és van benne egy olyan bug ami nem UTF8-as locale-ra elhasal. Kézzel tudom javítani, de nem szerencsés, mert egy update-nél vissza írhatja. Helyén akarom kezelni természetesen.

Egyéb ötlet? FastCGI opcióknál hogyan lehetne specifikálni, hogy a ruby kódomat utf8-as környezetben hajtsa meg? Egyébként az ENV változón üres az Apache futtatáskor, csak a PATH van benne, semmi más.

Kösz.

Hozzászólások

Kezdtem pedig kifogyni az ötletekből. Hogy azért egy kis infót is mondjak akkor már:

Babel script-et fordítok JavaScript-re a "babel-transpiler" GEM használatával. És a "babel.js" betöltésénél dobott a Ruby runtime hibaüzenetet hogy hibás karakter az US-ASCII kódolásban (\xEF). Nem értettem, mert terminálban manuálisan futtatva lefutott.

Sokáig nyomoztam mire kiderült hogy nem a komponensekkel van gond, hanem egyszerűen más a környezet karakterkódolása az Apache FCGI-n keresztül (attól független hogy UTF-8 kódolású a scriptem és az __ENCODING__ is UTF-8-at mutat és Ruby 2.x-től már default az UTF-8 és 2.4.x-en vagyok) és a fájlok betöltésénél lesz csak US-ASCII. A babel.js pedig nem úgy tölt be, és ezért az ExecJS-ben egy rosszul megírt sornál hibára fut ami nem akarok kézzel meg-patch-elni mert egy update felülírja.

Teljes megoldás:


nano /etc/apache2/mods-available/fcgid.conf
...
FcgidInitialEnv LC_ALL en_US.UTF-8
...
service apache2 restart