2016-09-12 2 views
6

Lorsque vous essayez de télécharger à distance une image via Carrierwave et Rails 5, je suis présenté avec une erreur de codage:Transfert de l'image à distance en utilisant Rails 5 et Carrierwave

Encoding::UndefinedConversionError - "\x89" from ASCII-8BIT to UTF-8

J'ai regardé this answer ainsi que la activesupport-json_encoder gem suggéré par la réponse, mais pas de chance. La gemme ne supporte pas les rails 5 pourtant il semblerait.

Ma forme est une forme de rails multipart normale qui ressemble à ceci:

= bootstrap_form_for @image, url: members_profile_path(current_user), remote: true, html: { multipart: true } do |f| 
    = f.file_field :attachment 
    = f.button "Save" 

Le champ qui contient l'image, est appelée « attachement ». Dans mon contrôleur mon code ressemble à ceci:

def create_profile_image 
    respond_to do |format| 
    @image.entity_id = current_user.id 
    if @image.validate(params[ :image ]) 
     @image.save 
     format.json { render json: @image, status: :ok } 
    else 
     format.json { render json: @image.errors, status: :unprocessable_entity } 
    end 
    end 
end 

J'utilise le reform gem pour gérer params autorisés. J'ai veillé à autoriser le paramètre de pièce jointe. En outre, j'ai également ajouté le Remotipart gem pour simplifier les téléchargements de fichiers distants via Rails.

Des idées pour lesquelles je pourrais être présenté avec cette erreur?

MISE À JOUR

C'est ce que je peux voir dans mon journal:

Started POST "/api/v1/private/members/profiles/94/create_profile_image" for 127.0.0.1 at 2016-09-17 17:58:06 +0200 
Processing by Api::V1::Private::Members::ProfilesController#create_profile_image as JSON 
    Parameters: {"utf8"=>"✓", "image"=>{"attachment_cache"=>"", "attachment"=>#<ActionDispatch::Http::UploadedFile:0x007fce2adb25b8 @tempfile=#<Tempfile:/var/folders/f0/7p7mh8fj2rj18b49ysfvkgb40000gn/T/RackMultipart20160917-2713-rey3nb.png>, @original_filename="imageedit_3_8650415599.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"image[attachment]\"; filename=\"imageedit_3_8650415599.png\"\r\nContent-Type: image/png\r\n">}, "button"=>"", "remotipart_submitted"=>"true", "authenticity_token"=>"f7M86L+Xisve4pNwcniTy3QaUWakL0sMtODLDkEf6Q7kGXZGCHY3rbPYe0jzPFIVjS/k0Gv4M2csoAQ7cuzMgQ==", "X-Requested-With"=>"IFrame", "X-Http-Accept"=>"application/json, text/javascript, */*; q=0.01", "id"=>"94"} 
    [1m[36mUser Load (1.3ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2[0m [["id", 94], ["LIMIT", 1]] 
    [1m[36mUser Load (0.3ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2[0m [["id", 94], ["LIMIT", 1]] 
    [1m[35m (1.1ms)[0m [1m[34mSELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'super_admin') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)) OR ((roles.name = 'company') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL)))[0m [["user_id", 94]] 
    [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m 
    [1m[35m (0.2ms)[0m [1m[31mROLLBACK[0m 
Completed 500 Internal Server Error in 31ms (ActiveRecord: 3.1ms) 



Encoding::UndefinedConversionError - "\x89" from ASCII-8BIT to UTF-8: 
    activesupport (5.0.0) lib/active_support/core_ext/object/json.rb:34:in `encode' 
    activesupport (5.0.0) lib/active_support/core_ext/object/json.rb:34:in `to_json' 
    activesupport (5.0.0) lib/active_support/core_ext/object/json.rb:34:in `to_json' 
    activesupport (5.0.0) lib/active_support/json/encoding.rb:55:in `to_json' 
    /Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/common.rb:224:in `generate' 
    /Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/common.rb:224:in `generate' 
    activesupport (5.0.0) lib/active_support/json/encoding.rb:99:in `stringify' 
    activesupport (5.0.0) lib/active_support/json/encoding.rb:33:in `encode' 
    activesupport (5.0.0) lib/active_support/json/encoding.rb:20:in `encode' 
    activesupport (5.0.0) lib/active_support/core_ext/object/json.rb:37:in `to_json' 
    actionpack (5.0.0) lib/action_controller/metal/renderers.rb:159:in `block in <module:Renderers>' 
    actionpack (5.0.0) lib/action_controller/metal/renderers.rb:152:in `block in _render_to_body_with_renderer' 
    /Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/2.3.0/set.rb:306:in `each_key' 
    /Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/2.3.0/set.rb:306:in `each' 
    actionpack (5.0.0) lib/action_controller/metal/renderers.rb:148:in `_render_to_body_with_renderer' 
    actionpack (5.0.0) lib/action_controller/metal/renderers.rb:144:in `render_to_body' 
    actionpack (5.0.0) lib/abstract_controller/rendering.rb:26:in `render' 
    actionpack (5.0.0) lib/action_controller/metal/rendering.rb:36:in `render' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render' 
    activesupport (5.0.0) lib/active_support/core_ext/benchmark.rb:12:in `block in ms' 
    /Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/2.3.0/benchmark.rb:308:in `realtime' 
    activesupport (5.0.0) lib/active_support/core_ext/benchmark.rb:12:in `ms' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:44:in `block in render' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime' 
    activerecord (5.0.0) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:43:in `render' 
    meta-tags (2.2.0) lib/meta_tags/controller_helper.rb:20:in `render' 
    app/controllers/api/v1/private/members/profiles_controller.rb:58:in `block (2 levels) in create_profile_image' 
    actionpack (5.0.0) lib/action_controller/metal/mime_responds.rb:201:in `respond_to' 
    app/controllers/api/v1/private/members/profiles_controller.rb:54:in `create_profile_image' 
    actionpack (5.0.0) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action' 
    actionpack (5.0.0) lib/abstract_controller/base.rb:188:in `process_action' 
    actionpack (5.0.0) lib/action_controller/metal/rendering.rb:30:in `process_action' 
    actionpack (5.0.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:126:in `call' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:455:in `call' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:101:in `__run_callbacks__' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:90:in `run_callbacks' 
    actionpack (5.0.0) lib/abstract_controller/callbacks.rb:19:in `process_action' 
    actionpack (5.0.0) lib/action_controller/metal/rescue.rb:20:in `process_action' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' 
    activesupport (5.0.0) lib/active_support/notifications.rb:164:in `block in instrument' 
    activesupport (5.0.0) lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
    activesupport (5.0.0) lib/active_support/notifications.rb:164:in `instrument' 
    actionpack (5.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
    actionpack (5.0.0) lib/action_controller/metal/params_wrapper.rb:248:in `process_action' 
    activerecord (5.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
    actionpack (5.0.0) lib/abstract_controller/base.rb:126:in `process' 
    actionview (5.0.0) lib/action_view/rendering.rb:30:in `process' 
    actionpack (5.0.0) lib/action_controller/metal.rb:190:in `dispatch' 
    actionpack (5.0.0) lib/action_controller/metal.rb:262:in `dispatch' 
    actionpack (5.0.0) lib/action_dispatch/routing/route_set.rb:50:in `dispatch' 
    actionpack (5.0.0) lib/action_dispatch/routing/route_set.rb:32:in `serve' 
    actionpack (5.0.0) lib/action_dispatch/journey/router.rb:39:in `block in serve' 
    actionpack (5.0.0) lib/action_dispatch/journey/router.rb:26:in `each' 
    actionpack (5.0.0) lib/action_dispatch/journey/router.rb:26:in `serve' 
    actionpack (5.0.0) lib/action_dispatch/routing/route_set.rb:725:in `call' 
    meta_request (0.4.0) lib/meta_request/middlewares/app_request_handler.rb:13:in `call' 
    meta_request (0.4.0) lib/meta_request/middlewares/meta_request_handler.rb:13:in `call' 
    warden (1.2.6) lib/warden/manager.rb:35:in `block in call' 
    warden (1.2.6) lib/warden/manager.rb:34:in `catch' 
    warden (1.2.6) lib/warden/manager.rb:34:in `call' 
    rack (2.0.1) lib/rack/etag.rb:25:in `call' 
    rack (2.0.1) lib/rack/conditional_get.rb:38:in `call' 
    rack (2.0.1) lib/rack/head.rb:12:in `call' 
    () Users/hermannharris/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/remotipart-7f7989db5729/lib/remotipart/middleware.rb:32:in `call' 
    rack (2.0.1) lib/rack/session/abstract/id.rb:222:in `context' 
    rack (2.0.1) lib/rack/session/abstract/id.rb:216:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/cookies.rb:613:in `call' 
    activerecord (5.0.0) lib/active_record/migration.rb:552:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:97:in `__run_callbacks__' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:750:in `_run_call_callbacks' 
    activesupport (5.0.0) lib/active_support/callbacks.rb:90:in `run_callbacks' 
    actionpack (5.0.0) lib/action_dispatch/middleware/callbacks.rb:36:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/executor.rb:12:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/remote_ip.rb:79:in `call' 
    better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call' 
    better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call' 
    better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call' 
    rack-contrib (1.2.0) lib/rack/contrib/response_headers.rb:17:in `call' 
    meta_request (0.4.0) lib/meta_request/middlewares/headers.rb:16:in `call' 
    web-console (3.3.1) lib/web_console/middleware.rb:131:in `call_app' 
    web-console (3.3.1) lib/web_console/middleware.rb:28:in `block in call' 
    web-console (3.3.1) lib/web_console/middleware.rb:18:in `catch' 
    web-console (3.3.1) lib/web_console/middleware.rb:18:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' 
    railties (5.0.0) lib/rails/rack/logger.rb:36:in `call_app' 
    railties (5.0.0) lib/rails/rack/logger.rb:24:in `block in call' 
    activesupport (5.0.0) lib/active_support/tagged_logging.rb:70:in `block in tagged' 
    activesupport (5.0.0) lib/active_support/tagged_logging.rb:26:in `tagged' 
    activesupport (5.0.0) lib/active_support/tagged_logging.rb:70:in `tagged' 
    railties (5.0.0) lib/rails/rack/logger.rb:24:in `call' 
    sprockets-rails (3.1.1) lib/sprockets/rails/quiet_assets.rb:13:in `call' 
    request_store (1.3.1) lib/request_store/middleware.rb:9:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/request_id.rb:24:in `call' 
    rack (2.0.1) lib/rack/method_override.rb:22:in `call' 
    rack (2.0.1) lib/rack/runtime.rb:22:in `call' 
    activesupport (5.0.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/executor.rb:12:in `call' 
    actionpack (5.0.0) lib/action_dispatch/middleware/static.rb:136:in `call' 
    rack (2.0.1) lib/rack/sendfile.rb:111:in `call' 
    rack-cors (0.4.0) lib/rack/cors.rb:80:in `call' 
    railties (5.0.0) lib/rails/engine.rb:522:in `call' 
    puma (3.6.0) lib/puma/configuration.rb:225:in `call' 
    puma (3.6.0) lib/puma/server.rb:578:in `handle_request' 
    puma (3.6.0) lib/puma/server.rb:415:in `process_client' 
    puma (3.6.0) lib/puma/server.rb:275:in `block in run' 
    puma (3.6.0) lib/puma/thread_pool.rb:116:in `block in spawn_thread' 
+0

Pouvez-vous publier la trace de pile pour cette erreur? –

+0

J'ai ajouté mon fichier journal @ MichałMłoźniak – Herm

Répondre

0

mise à niveau inférieur bson 3.1.1 dans votre Gemfile.

Cela peut vous aider.

+0

Il n'y a pas de gem bson dans mon gemfile – Herm

0

Vous pouvez essayer d'installer bijou activesupport-json_encoder de la fourche github, qui prend en charge les rails 5.

gem 'activesupport-json_encoder', git:'https://github.com/kongregate/activesupport-json_encoder.git', branch: 'rails-5.0' 
+0

Merci. Cette bombe complète lors du redémarrage du serveur Rails. Il parvient cependant à regrouper la gemme avec cette instruction gemfile. – Herm

0

params Encode [: image] en UTF-8 en utilisant, force_encoding ("UTF-8")

1

Vous essayez d'render une image à json, ce qui n'est pas pris en charge.

Vous voulez probablement personnaliser as_json pour exclure l'image (le champ attachment) de la représentation de l'objet, ou utiliser

format.json { render json: @image, except: :attachment, status: :ok } 

Voir this answer pour plus de détails sur la façon d'exclure un champ de la représentation json .