Apache - > Ruby语言环境

时间:2017-09-22 21:48:41

标签: ruby apache fastcgi

我已经获得以下代码检查读取文件的默认编码(我在Linux上,我是16 x64),仅用于测试:

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

如果Apache通过FastCGI调用我的代码,那么输出是US_ASCII(C语言环境),但如果我从系统中的任何地方手动运行我的代码,我会得到en_US.UTF-8编码。

更改/ etc / apache2 / envvars中的LANG env变量没有任何效果。在/etc/init.d/apache2中更改ENV配置并不是(当然在服务重启之后)。 / etc / default / locale设置为en_US.UTF-8。在我的conf文件中使用虚拟主机并添加默认的字符集也无济于事。

从Apache调用时检查ENV数组几乎是空的(只设置了PATH变量),而在手动运行时检查它则充满了LANG等变量。所以这显然是一个环境设置问题。

我在项目中使用了外部GEM,并且在非unicode环境中运行时出现了错误。我可以手动修补它,但它不是一个好的解决方案,因为更新会覆盖它。

如何让Apache运行我在unicode环境中调用的代码?

1 个答案:

答案 0 :(得分:0)

解决方案是:https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv

    edit /etc/apache2/mods-available/fcgid.conf
    FcgidInitialEnv LC_ALL en_US.UTF-8

    service apache2 restart