2017-09-22 85 views
0

我有下面的代码检查读取文件的默认编码(我在Linux,Ubuntu的16 64),只是为了测试:阿帕奇 - >红宝石区域

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变量),而在手动运行时检查ENV数组充满了像LANG等变量。所以这显然是一个环境设置问题。

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

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

+0

同时,我得到了一个答案。解决方案在这里,它已解决:https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv – log69

+0

如果您使用的是Ruby,那么FastCGI是您应该使用的最后一件事。像[Sinatra](http://www.sinatrarb.com)这样的软件包使编写简单的HTTP服务变得非常简单,[Passenger](https://www.phusionpassenger.com)是一个模块,它使Apache httpd(或Nginx!)比通过FastCGI更有效地运行Ruby。 – tadman

+0

如果你确实解决了你的问题,那么总是值得添加一个自助答案来帮助他人。那里的评论并没有将此标记为“已解决”,这是一个被接受的答案。 – tadman

回答