Apache -> Ruby locale?

 ( log69 | 2017. szeptember 22., péntek - 22:11 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nem túl biztató, ilyet találtam, igaz Python-hoz de ugyanaz a probléma:

http://blog.dscpl.com.au/2014/09/setting-lang-and-lcall-when-using.html

Ez? https://httpd.apache.org/docs/2.4/mod/mod_env.html#passenv
Vagy ez? https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv

Pontosan milyen Apache modult használsz?
Ezt kellene beállítani:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

♲♻♲

mod_fcgid modult hasznélok. Nézem amit írtál..

[MEGOLDVA]

Ez kellett, a második. Sok oldalról megpróbáltam fogni, fcgid beálításokat is néztem, de ez kimaradt. Jó lett, megjelent az ENV-ben amit átpasszolok. A fájl encoding-ja is UTF-8 lett. Kösz szépen.

Szuper, nincs mit.

♲♻♲

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