设置:
我有一个C#程序,它在开始时编写一个新的ElasticSearch索引,并将rails应用程序使用的别名指向它,然后该程序继续运行,并监视一个redis实例,以便进行更新。
还有另一个C#程序,它从网页中抓取数据,一旦将它们放到Postgresql中,上面的索引编写器就会通过Redis通知。这些页面有不同的编码,并转换为UTF-8。
这个bug的第一次出现是当我犯了一个错误,并将已经被UTF-8编码的数据再次编码为UTF-8。
Investigation
现在我认为我显然有一些数据损坏,但奇怪的是:只有当我通过nohup从rails启动索引单进程时,umlauts才会损坏,如果我杀死这个进程并从命令行手动启动它,它就会运行得很好。
当我对数据库进行备份/还原时,它会从web接口再次工作,但是一旦服务器被重新启动,就会再次用?替换??当从web界面启动单进程时。
我做的第一件事是从数据库中清除受影响的行并再次刮除数据(不对其进行两次编码),这并没有帮助,而且由于错误仅在rails应用程序中以非交互式的形式运行时才出现,因此我认为这是由于区域设置的原因,所以我在/etc/defaults/locale和/etc/环境中都将其更改为en_US.UTF-8和en_US:en,但这也没有帮助。
我真的不知道我还能做些什么,也不知道是什么导致了这一错误,任何帮助都将不胜感激。
编辑:我忘了澄清最重要的部分,当umlauts被替换为?时,在索引中的每个文档中都替换了所有的值。
发布于 2013-10-13 12:48:10
将其放入用于启动进程的脚本中:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8您的脚本只在手动启动时获得UTF-8的原因是这些东西不是系统范围的。我以前在jruby和init.d脚本中遇到过这种情况,解决方案是不依赖默认值。
https://stackoverflow.com/questions/19340737
复制相似问题