【发布时间】:2011-07-10 03:56:40
【问题描述】:
我正在使用 Ruby 1.9.2、Rails 3.0.4/3.0.5 和 Phusion Passenger 3.0.3/3.0.4。我的模板是用 HAML 编写的,我使用的是 MySQL2 gem。我有一个控制器操作,当传递一个具有特殊字符(如变音符号)的参数时,会出现以下错误:
ActionView::Template::Error (incompatible character encodings: UTF-8 and ASCII-8BIT)
错误指向我的 HAML 模板的第一行,上面有以下代码:
<!DOCTYPE html>
我的理解是,这是因为我有一个 UTF-8 字符串与一个 ASCII-8BIT 字符串连接,但我终生无法弄清楚那个 ASCII-8BIT 字符串是什么。我检查了操作中的参数是否使用 UTF-8 进行编码,并且我在 HAML 模板和 ruby 文件的顶部添加了一个 encoding: UTF-8 声明,但我仍然收到此错误。我的 application.rb 文件中也有一个 config.encoding = "UTF-8" 声明,以下都导致 UTF-8:
ENV['LANG']
__ENCODING__
Encoding.default_internal
Encoding.default_external
问题来了:我无法在我的 Mac-OSX 上本地重现此结果,无论是在开发还是生产中使用独立的乘客或杂种。我只能在 linux 上运行 nginx+passenger 的生产服务器上重现它。我已经在生产服务器的控制台中验证了后者提到的命令也都导致 UTF-8。
您是否遇到过同样的错误,您是如何解决的?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 passenger ruby-1.9.2