2017-10-16 8 views
0

이 오류는 프로덕션에서만 발생하며 특정 레코드를 편집 할 때만 발생합니다 . 개발 중에는 발생하지 않으며 다른 기록에서는 발생하지 않습니다. 뿐만 아니라 템플릿에 UTF 문자가없고 en.yml에 UTF 문자가 없으며 레코드에도 UTF 문자가 없습니다! 나는 기록적인 벌금을 보거나 보여줄 수있다.UTF 문자가없는 HAML 템플릿 오류 : ActionView :: Template :: Error (호환되지 않는 문자 인코딩 : ASCII-8BIT 및 UTF-8)

272 <158>1 2017-10-16T16:57:50.349003+00:00 host heroku router - at=info method=GET path="https://stackoverflow.com/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 * 

나라가 '생 바르 텔레 미'와 '상투 메 프린시 페'를 제외하고 모든 UTF 문자가없는 것입니다. 그러나 나는 여전히 다른 나라의 기록을 편집 할 수 있으며 모든 나라를 잘 기록 할 수 있습니다.

나는 (내가 request를 사용하지 않는.)
  • incompatible character encodings: ASCII-8BIT and UTF-8 (I 템플릿에는 UTF이 없습니다.)
  • Error: Incompatible character encodings: UTF-8 and ASCII-8BIT
  • (나는 NLS_LANG = AMERICAN_AMERICA을 설정

    아무도 작동하지 않았습니다. 나는 또한 시도했다

    class Application < Rails::Application 
        config.encoding = "utf-8" 
    

    나는 Heroku, Postgres, HAML 및 Rails 5.0.6을 사용 중이다.

    답변

    0

    로컬 서버를 프로덕션 데이터베이스에 연결하고 레코드를 편집하려고했습니다. 나는 그것이로드되고 .description 필드로 좁혀 질 때까지 전체 섹션을 -#으로 주석 처리했습니다. 이는 오류 메시지의 내용이 아닙니다. 웹 디버거를 사용하여 필드를 인쇄했습니다.

    >> @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') 추가 사용자 정의 유형으로 문제를 추적.