在ruby 1.9.1中编译rails中的问题

时间:2009-08-28 01:29:16

标签: ruby-on-rails ruby

我正在使用rails 2.3.3和ruby 1.9.1。

我正在尝试渲染包含部分视图的视图。在部分i中输出以UTF8编码的模型的字段。 这失败了

ActionView::TemplateError (incompatible character encodings: ASCII-8BIT and UTF-8) on line #248 of app/views/movie/show.html.erb:
245:    <!-- Coloumn right | start -->
246:    <div class="col_right">
247: 
248:        <%= render :partial => 'movie_stats' %>
249: 
250:        <!-- uploaders -->
251:        <div class="box_white">     

另一方面,如果我直接在视图中使用该字段(当它不是部分字段时),我可以输出utf8内容的字段。

我该如何解决这个问题? 我已经尝试过设置默认编码,但这似乎不起作用。

3 个答案:

答案 0 :(得分:9)

我也有这个,所以我认为它值得有正确的答案。

2.8.1 MySql gem不是utf-8友好的,因此它有时会返回UTF字符串并对Rails撒谎,告诉它它们是ASCII,而实际上它们是UTF-8。这让事情爆炸了。

所以:你可以修补补丁或获得兼容的MySql gem。请参阅:http://gnuu.org/2009/11/06/ruby19-rails-mysql-utf8/

答案 1 :(得分:2)

在Ruby 1.9中,ERB的编码似乎存在问题。更多详情请见this Lighthouse ticket。一个带有解决方法has been included的补丁,也许它适用于你?

  

问题是ruby 1.9发行版中的erb代码。当它编译模板代码时会强制执行'ASCII-8bit'编码,问题是当模板代码有多字节字符时,模板代码以'ASCII-8bit'字符串返回,当此字符串与'UTF8'连接时具有多字节字符的字符串引发异常,因为这两种编码之间的字符串仅在两者都只有七位字符时才兼容。

答案 2 :(得分:0)

Ruby 1.9x和mysql gem之间似乎存在关于如何来回传递字符串(特别是字符串的编码)的不兼容性。

要修复,请运行

gem install mysql2 

在服务器上并更新数据库配置文件以使用此gem而不是之前的gem。