我收到此错误,但仅限于生产,并且仅在编辑特定记录时。它不会在开发中发生,也不会发生在任何其他记录中。不仅如此,模板中没有UTF字符,en.yml
中没有UTF字符,记录也没有UTF字符!我可以查看/显示记录正常。
272 <158>1 2017-10-16T16:57:50.349003+00:00 host heroku router - at=info method=GET path="/users/26/edit" host=www.host.net request_id=6d8d22cc-3050-4628-85a4-f660991b4ce3 fwd="99.99.99.99" dyno=web.1 connect=4ms service=442ms status=500 bytes=1733 protocol=https
145 <190>1 2017-10-16T16:57:50.345615+00:00 host app web.1 - F, [2017-10-16T16:57:50.344992 #4] FATAL -- : [6d8d22cc-3050-4628-85a4-f660991b4ce3]
228 <190>1 2017-10-16T16:57:50.345696+00:00 host app web.1 - F, [2017-10-16T16:57:50.345626 #4] FATAL -- : [6d8d22cc-3050-4628-85a4-f660991b4ce3] ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8):
173 <190>1 2017-10-16T16:57:50.346033+00:00 host app web.1 - F, [2017-10-16T16:57:50.345973 #4] FATAL -- : [6d8d22cc-3050-4628-85a4-f660991b4ce3] 55: .input-group
150 <190>1 2017-10-16T16:57:50.346035+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 56: - us = Country.find_by code: 'US'
237 <190>1 2017-10-16T16:57:50.346036+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 57: =cf.collection_select :country_id, [us] + Country.all, :id, :name, {prompt: t('company.country')}, class: 'form-control'
146 <190>1 2017-10-16T16:57:50.346037+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 58: .input-group-addon.required *
143 <190>1 2017-10-16T16:57:50.346038+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 59: .card-header= t 'company.financials'
118 <190>1 2017-10-16T16:57:50.346039+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 60: .card-block
119 <190>1 2017-10-16T16:57:50.346040+00:00 host app web.1 - [6d8d22cc-3050-4628-85a4-f660991b4ce3] 61: .card-text
145 <190>1 2017-10-16T16:57:50.346087+00:00 host app web.1 - F, [2017-10-16T16:57:50.346035 #4] FATAL -- : [6d8d22cc-3050-4628-85a4-f660991b4ce3]
259 <190>1 2017-10-16T16:57:50.346213+00:00 host app web.1 - F, [2017-10-16T16:57:50.346100 #4] FATAL -- : [6d8d22cc-3050-4628-85a4-f660991b4ce3] app/views/companies/_edit.haml:58:in `block in _app_views_companies__edit_haml___3739913582972992033_70135683358520'
HAML
.input-group
- us = Country.find_by code: 'US'
=cf.collection_select :country_id, [us] + Country.all, :id, :name, {prompt: t('company.country')}, class: 'form-control'
.input-group-addon.required *
除了'Saint-Barthélemy'和'SãoTomé和Príncipe'之外,各国没有任何UTF字符。但是,我仍然可以编辑其他记录并列出所有国家/地区。
我在
中尝试了解决方案request
。)他们都没有奏效。我也试过
class Application < Rails::Application
config.encoding = "utf-8"
我正在使用Heroku,Postgres,HAML和Rails 5.0.6。
答案 0 :(得分:0)
我将本地服务器连接到生产数据库并尝试编辑记录。我用-#
注释掉整个部分,直到它加载并缩小到.description
字段,这肯定不是错误消息中的内容。我使用Web调试器打印出字段
>> @user.company.description
=> "... world\xE2\x80\x99s largest ..."
>> @user.company.description.encoding
=> #<Encoding:ASCII-8BIT>
我看到它不是UTF-8编码。 (但奇怪的是它会在#show
中显示它。我将问题跟踪到自定义类型
class Company < ApplicationRecord
@@encrypted_fields = [:name, :phone, :address1, :address2, :ein, :bank, :url, :description]
@@encrypted_fields.each do |ef|
attribute ef, :encrypted
class EncryptedType < ActiveRecord::Type::Text
# called when loading from DB
def deserialize(value)
value.decrypt.force_encoding('utf-8') unless value.nil?
我在解密后添加.force_encoding('utf-8')
,现在可以正常使用。