Несовместимые кодировки символов Rails 2.3 + Ruby 1.8.7: UTF-8 и ASCII-8BIT

У меня была эта проблема в index.rhtml нашего приложения. По сути, у меня есть динамический div на странице, где отображается вся информация о текущих подписанных пользовательских проектах.

Вот фрагмент, где возникает ошибка:

<% projects.each do |p| %>
  <tr>
    <td><div><%=h p.location %></div></td> <- ERROR
  ...

Обратите внимание, что p.location просто возвращает строку.

Странно то, что эта ошибка не появляется в моей локальной копии приложения, а возникает только на рабочем сервере. Моя локальная копия использует ту же среду, что и производственный сервер (gems, версия Ruby, версия Rails).

Вот мой список драгоценных камней

*** LOCAL GEMS ***
actionmailer (2.3.5)
actionpack (2.3.5)
activerecord (2.3.5)
activeresource (2.3.5)
activesupport (2.3.5)
bcrypt-ruby (2.1.2)
bson (0.20.1)
bundler (1.0.22)
composite_primary_keys (2.3.5.1)
factory_girl (2.5.1)
fastthread (1.0.7)
ferret (0.11.6)
jnunemaker-validatable (1.8.3)
mocha (0.9.8)
mongo (0.19.3)
mongo_mapper (0.7.3)
mysql (2.8.1)
rack (1.0.1)
rails (2.3.5)
rake (0.9.2.2)
redgreen (1.2.2)
rubygems-bundler (0.2.8)
rvm (1.9.2)
thoughtbot-shoulda (2.11.1)

person Normz    schedule 13.07.2012    source источник


Ответы (1)


Нашел хакерский способ исправить это с помощью iconv. В основном я принудительно использовал кодировку utf-8.

В модели:

class Project < ActiveRecord::Base  
...

  def location
    ::Iconv.conv('UTF-8//IGNORE', 'UTF-8', self[:location] + ' ')[0..-2]
  end

...
end

Но это все еще не ответило на мой вопрос, почему я не могу воспроизвести ошибку на своем локальном компьютере, и это происходит только на рабочем сервере.

person Normz    schedule 13.07.2012