pingu
pingu

Reputation: 8827

Incompatible encoding when requiring a gem

The third line in my ruby script

# encoding: utf-8

require "mail"

results in the following error

/usr/local/share/gems1.9/gems/json-1.8.1/lib/json/pure/parser.rb:242:in `rescue in parse_string': Caught Encoding::CompatibilityError at '[{"content-type":"ap': incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (JSON::ParserError)
    from /usr/local/share/gems1.9/gems/json-1.8.1/lib/json/pure/parser.rb:213:in `parse_string'
    from /usr/local/share/gems1.9/gems/json-1.8.1/lib/json/pure/parser.rb:257:in `parse_value'
    from /usr/local/share/gems1.9/gems/json-1.8.1/lib/json/pure/parser.rb:121:in `parse'
    from /usr/local/share/gems1.9/gems/json-1.8.1/lib/json/common.rb:155:in `parse'
    from /usr/local/share/gems1.9/gems/json-1.8.1/lib/json/common.rb:334:in `load'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types/loader.rb:210:in `load_from_json'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types/loader.rb:61:in `block in load_json'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types/loader.rb:60:in `each'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types/loader.rb:60:in `load_json'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types/loader.rb:87:in `load'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types.rb:280:in `load_default_mime_types'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types.rb:307:in `<class:Types>'
    from /usr/local/share/gems1.9/gems/mime-types-2.3/lib/mime/types.rb:62:in `<top (required)>'
    from /usr/local/share/ruby19/site_ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/share/ruby19/site_ruby/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/share/gems1.9/gems/mail-2.6.1/lib/mail.rb:9:in `<module:Mail>'
    from /usr/local/share/gems1.9/gems/mail-2.6.1/lib/mail.rb:2:in `<top (required)>'
    from /usr/local/share/ruby19/site_ruby/rubygems/core_ext/kernel_require.rb:135:in `require'
    from /usr/local/share/ruby19/site_ruby/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
    from /usr/local/share/ruby19/site_ruby/rubygems/core_ext/kernel_require.rb:144:in `require'
    from Mailer.rb:3:in `<main>'

note this error only occurs in production on AWS with Ruby 1.9.3. In development with Ruby 2, it works fine.

Upvotes: 1

Views: 461

Answers (2)

knut
knut

Reputation: 27855

Sorry, this is no solution, only an explanation why it works correct with ruby 2.0 but not with 1.9.3:

Since ruby 2.0 all scripts are utf-8-encoded (unless something else is defined)

What is Ruby 2.0.0

[...]

Language core features

[...]

  • The UTF-8 default encoding, which make many magic comments omissible

Source: https://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is-released/

In Ruby 1.9 UTF-8 is not the default, so there may be a encoding difference between your script in UTF-8 and the script you call.

Upvotes: 1

Cesar Oyarzun
Cesar Oyarzun

Reputation: 169

I solved this issue adding this to my gemfile:

gem 'oj'
gem 'oj_mimic_json'

then run bundle install and try to run server again

Upvotes: 0

Related Questions