设置:

  • 通过VMWare安装的Ubuntu 12.04 Server快速安装
  • PostgreSQL 9.1的
  • ElasticSearch 0.90
  • Mono 3.2.1
  • Rails 4
  • Nginx 1.4.2 +乘客4.0.16

  • 我有一个C#程序,该程序在开始时编写一个新的ElasticSearch索引,并将rails应用程序使用的别名指向它,然后该程序继续运行并监视redis实例以更新事物。

    还有另一个C#程序会从网页上抓取数据,一旦抓取到的数据就会被放入Postgresql中,并且上面的索引编写器会通过Redis通知。这些页面具有不同的编码,并转换为UTF-8。

    该错误的第一次出现是当我犯了一个错误,并将已经是UTF-8的数据再次编码为UTF-8时。

    调查

    现在,我认为我显然正在进行一些数据损坏,但是奇怪的是:如果我杀死了该进程并从命令行手动启动,则只有当我通过nohup从rails启动indexing mono进程时,变音才损坏。很好。

    当我对数据库进行备份/还原时,它可以从Web界面再次工作,但是一旦服务器重新启动,变音符将再次替换为??。从网络界面启动单声道进程时。

    我要做的第一件事是从数据库中清除受影响的行并再次刮取数据(无需两次编码),这没有帮助,因为错误仅在通过Rails应用程序通过nohup以非交互方式运行时才会出现我以为是因为语言环境设置,所以我在/ etc / defaults / locale和/ etc / environment中都将其更改为en_US.UTF-8和en_US:en,但这都没有帮助。

    我真的不知道我还能做些什么或究竟是什么导致了此错误,所以不胜感激。

    编辑:当变音符号替换为??时,我忘了澄清最重要的部分在索引中的每个单个文档中,所有变音符号都会被替换。

    最佳答案

    将其放在用于启动过程的脚本中:

    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    

    您的脚本仅在您手动启动时才选择UTF-8的原因是这些东西不是系统范围的。我以前用jruby和init.d脚本遇到过这种情况,解决方案是不依赖于默认值。

    关于encoding - Elasticsearch将变音符号显示为 “??”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19340737/

    10-10 15:51