升级到 ruby 1.9 后,我们开始注意到当用户使用非 ASCII 字符时,页面无法从 rails 模板渲染器渲染。特别是“é”。我能够在我们的一台登台服务器上解决此问题,但我无法在我们的生产服务器上重现该修复程序。
第一次似乎有效的修复:
使用此处提供的 convert_charset 工具将数据库从 latin1 转换为 utf8:http ://www.mysqlperformanceblog.com/2009/03/17/converting-character-sets/ 。(包括
default_character_set=utf8
在 my.cnf 中设置和运行SET GLOBAL character_set_server=utf8
切换到 sam-mysql-ruby 适配器(而不是标准 mysql 适配器: http: //gemcutter.org/gems/sam-mysql-ruby)
重新启动的轨道
错误是:
"invalid byte sequence in US-ASCII"
奇怪的是,按照上述步骤操作后,我们的生产服务器上的错误并没有改变。在 database.yml 中的设置encoding: utf8
也不会改变错误。
以下代码行引发的错误:
<%= link_to h(question.title), question_path(question) %>
该博客似乎建议修复,但它提到这在 1.9 中应该不是问题:http ://www.igvita.com/2007/04/11/secure-utf-8-input-in-rails/ (并且已经超过 2 岁)。
我想随着越来越多的 Rails 开发人员转向 1.9,这个问题可能很快会影响到很多人。