【问题标题】:carrierwave upload Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8载波上传编码::UndefinedConversionError: "\xFF" 从 ASCII-8BIT 到 UTF-8
【发布时间】:2016-10-27 00:26:43
【问题描述】:

在生产中遇到此错误,但无法确定问题出在哪里。同样的请求适用于本地开发。但生产失败。我正在为移动客户端构建 API

错误跟踪

```

Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8
... 39 non-project frames
File"/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/core_ext/object/json.rb" line 34 in encode
File"/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/core_ext/object/json.rb" line 34 in to_json
File"/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/core_ext/object/json.rb" line 34 in to_json_with_active_support_encoder
File"/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/json/encoding.rb" line 56 in to_json
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/json-1.8.1/lib/json/common.rb" line 223 in generate
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/json-1.8.1/lib/json/common.rb" line 223 in generate
File"/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/json/encoding.rb" line 96 in stringify
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport4.1.0/lib/active_support/json/encoding.rb" line 34 in encode
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/json/encoding.rb" line 21 in encode
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/core_ext/object/json.rb" line 37 in to_json_with_active_support_encoder
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/multi_json-1.10.1/lib/multi_json/adapters/json_common.rb" line 21 in dump
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/multi_json-1.10.1/lib/multi_json/adapter.rb" line 24 in dump
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/multi_json-1.10.1/lib/multi_json.rb" line 136 in dump
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rollbar-0.12.20/lib/rollbar.rb" line 437 in build_payload
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rollbar-0.12.20/lib/rollbar.rb" line 95 in report_exception
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rollbar-0.12.20/lib/rollbar/exception_reporter.rb" line 9 in report_exception_to_rollbar
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rollbar-0.12.20/lib/rollbar/middleware/rails/show_exceptions.rb" line 22 in rescue in call_with_rollbar
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rollbar-0.12.20/lib/rollbar/middleware/rails/show_exceptions.rb" line 19 in call_with_rollbar
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/actionpack-4.1.0/lib/action_dispatch/middleware/show_exceptions.rb" line 30 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/railties-4.1.0/lib/rails/rack/logger.rb" line 38 in call_app
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/railties-4.1.0/lib/rails/rack/logger.rb" line 20 in block in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/tagged_logging.rb" line 68 in block in tagged
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/tagged_logging.rb" line 26 in tagged
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/tagged_logging.rb" line 68 in tagged
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/railties-4.1.0/lib/rails/rack/logger.rb" line 20 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/actionpack-4.1.0/lib/action_dispatch/middleware/request_id.rb" line 21 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rack-1.5.2/lib/rack/methodoverride.rb" line 21 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rack-1.5.2/lib/rack/runtime.rb" line 17 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/activesupport-4.1.0/lib/active_support/cache/strategy/local_cache_middleware.rb" line 26 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/rack-1.5.2/lib/rack/sendfile.rb" line 112 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/railties-4.1.0/lib/rails/engine.rb" line 514 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/railties-4.1.0/lib/rails/application.rb" line 144 in call
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/unicorn-4.8.2/lib/unicorn/http_server.rb" line 572 in process_client
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/unicorn-4.8.2/lib/unicorn/http_server.rb" line 666 in worker_loop
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/unicorn-4.8.2/lib/unicorn/http_server.rb" line 521 in spawn_missing_workers
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/unicorn-4.8.2/lib/unicorn/http_server.rb" line 140 in start
File "/home/deploy/.bundler/example/ruby/2.0.0/gems/unicorn-4.8.2/bin/unicorn_rails" line 209 in <top (required)>
File "/home/deploy/.bundler/example/ruby/2.0.0/bin/unicorn_rails" line 23 in load
File "/home/deploy/.bundler/example/ruby/2.0.0/bin/unicorn_rails" line 23 in <main>

```

控制器非常简单

```

  def create
    @work = current_user.works.build(permitted_params.work)
    if @work.save
      render json: @work, status: :created
    else
      render json: { status: 'error', message: @work.errors.full_messages }, status: :bad_request
    end
  end

```

原始请求正文

```

POST /api/my/works HTTP/1.1
Host: example.com
Cache-Control: no-cache
Postman-Token: 98f4ce29-a72e-53e9-98e6-d08bbc4ca6f1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryp7MA4YWxkTrZu0gW

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="auth_token"

0e008b699c8904c26cba54ac54a5bb49
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="name"

blah
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="cover_image"; filename="IMG_1755.JPG"
Content-Type: image/jpeg


----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="model"

iPad Air
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="work_type"

is_public
----WebKitFormBoundaryE19zNvXGzXaLvS5C

```

环境

导轨 4.1.1 红宝石 2.0

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 encoding carrierwave


    【解决方案1】:

    根据 Rails 4.1 发行说明:

    移除了对用于自定义编码的 encode_json 钩子的支持 对象转换成 JSON。该特征已被提取到 activesupport-json_encoder gem。 (相关的拉取请求/更多详细信息)

    因为 activesupport 不再编码无效代码。将 activesupport-json_encoder gem 添加到 Gemfile 修复此问题。

    【讨论】:

    • 你能详细说明这应该如何解决吗?我试过这样做,但在我的情况下它不起作用
    • 我很好奇为什么 Rails 取消了对 encode_json 钩子的支持?
    【解决方案2】:

    如果它可以帮助那些试图找到错误解决方案的人,同时尝试编写 .jpg 或任何图像文件。

    用“wb”代替“w” File.open(filename,'wb') 为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 2017-10-02
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多