2017-09-22 5 views
0

J'ai le code suivant vérification de l'encodage par défaut pour les fichiers de lecture (je suis sous Linux, Ubuntu 16 x64), juste pour le test:Apache -> locale Ruby

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

Si Apache appelle mon code via FastCGI, la sortie est US_ASCII (C locale), mais si j'exécute mon code manuellement à partir de n'importe où dans le système, j'obtiens un encodage en_US.UTF-8.

La modification de la variable d'environnement LANG dans/etc/apache2/envvars n'a aucun effet. Changer la configuration ENV dans /etc/init.d/apache2 ne le fait pas non plus (après le redémarrage du service bien sûr)./etc/default/locale est défini sur en_US.UTF-8. Jouer avec le virtualhost dans mon fichier de configuration et ajouter des jeux de caractères par défaut n'aide pas non plus.

La vérification du tableau ENV à partir d'Apache est presque vide (seule la variable PATH est définie), alors que la vérification manuelle est remplie de variables telles que LANG, etc. Il s'agit donc évidemment d'un problème d'environnement.

Il existe un GEM externe que j'utilise pour mon projet et il présente un bogue lorsqu'il est exécuté dans un environnement non-unicode. Je pourrais le patcher manuellement mais ce n'est pas une bonne solution car une mise à jour va l'écraser. Comment puis-je obtenir Apache pour exécuter mon code appelé dans un environnement Unicode?

+0

En attendant, je reçu une réponse. La solution est là, elle est RESOLU: https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv – log69

+0

Si vous utilisez Ruby alors FastCGI est la * dernière * chose que vous devriez utiliser. Des paquets comme [Sinatra] (http://www.sinatrarb.com) rendent l'écriture de services HTTP simples super facile et [Passenger] (https://www.phusionpassenger.com) est un module qui rend Apache httpd (ou Nginx!) exécuter Ruby beaucoup plus efficacement que via FastCGI. – tadman

+0

Si vous résolvez votre problème, il vaut toujours la peine d'ajouter une réponse personnelle pour aider les autres. Le commentaire ne marque pas cela comme "résolu", une réponse acceptée le fait. – tadman

Répondre