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.
- 1071 megtekintés
Hozzászólások
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
- A hozzászóláshoz be kell jelentkezni
Közben kérdezem SO-n is:
https://stackoverflow.com/questions/46373666/apache-ruby-locale
- A hozzászóláshoz be kell jelentkezni
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
♲♻♲
- A hozzászóláshoz be kell jelentkezni
mod_fcgid modult hasznélok. Nézem amit írtál..
- A hozzászóláshoz be kell jelentkezni
[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.
- A hozzászóláshoz be kell jelentkezni
Szuper, nincs mit.
♲♻♲
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni