简体   繁体   English

如何修复 Rails 应用程序中的“无效查询参数”错误?

[英]How to fix an "Invalid query parameters" error in a Rails app?

A user recently triggered an error while he was signing up to our website.一位用户最近在注册我们的网站时触发了一个错误。

I've tried to reproduce the error but I didn't succeed.我试图重现该错误,但没有成功。 I understand that there is a problem with the "é" character.我了解“é”字符存在问题。 It is not being recognized for this particular user, but it has been for many others.它没有被这个特定用户识别,但它已经被许多其他用户识别。

From his user-agent, I know that he had this error on IE11.从他的用户代理中,我知道他在 IE11 上遇到了这个错误。

This is the trace of the error :这是错误的痕迹:

An ActionController::BadRequest occurred in registrations#new:

  Invalid query parameters: Invalid encoding for parameter: Martin�



-------------------------------
Request:
-------------------------------

  ERROR: Failed to generate exception summary:

  ActionView::Template::Error: Invalid query parameters: Invalid encoding for parameter: Martin�

  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/request/utils.rb:36:in `check_param_encoding'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/request/utils.rb:31:in `block in check_param_encoding'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/request/utils.rb:31:in `each_value'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/request/utils.rb:31:in `check_param_encoding'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/http/request.rb:350:in `block in GET'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/request.rb:57:in `fetch'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/request.rb:57:in `fetch_header'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/http/request.rb:347:in `GET'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/http/parameters.rb:53:in `parameters'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/http/filter_parameters.rb:41:in `filtered_parameters'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/views/exception_notifier/_request.text.erb:4:in `_vendor_bundle_ruby_______gems_exception_notification_______lib_exception_notifier_views_exception_notifier__request_text_erb__475519309245050229_56429000'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:157:in `block in render'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:168:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:352:in `instrument_render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:155:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/partial_renderer.rb:342:in `block in render_partial'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `block in instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/partial_renderer.rb:331:in `render_partial'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:77:in `block in render_partial_with_scout_instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:34:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:73:in `render_partial_with_scout_instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/partial_renderer.rb:310:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/renderer.rb:47:in `render_partial'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/helpers/rendering_helper.rb:35:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb:9:in `block in _vendor_bundle_ruby_______gems_exception_notification_______lib_exception_notifier_views_exception_notifier_exception_notification_text_erb__1927315004961554431_56948680'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb:7:in `map'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb:7:in `_vendor_bundle_ruby_______gems_exception_notification_______lib_exception_notifier_views_exception_notifier_exception_notification_text_erb__1927315004961554431_56948680'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:157:in `block in render'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:168:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:352:in `instrument_render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/template.rb:155:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/template_renderer.rb:52:in `block (2 levels) in render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `block in instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/template_renderer.rb:51:in `block in render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/template_renderer.rb:59:in `render_with_layout'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/template_renderer.rb:50:in `render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:77:in `block in render_template_with_scout_instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:34:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/tracer.rb:73:in `render_template_with_scout_instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/template_renderer.rb:14:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/renderer.rb:42:in `render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/renderer/renderer.rb:23:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/rendering.rb:103:in `_render_template'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/rendering.rb:83:in `render_to_body'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/rendering.rb:24:in `render'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/base.rb:921:in `block in collect_responses'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/collector.rb:26:in `custom'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/collector.rb:9:in `text'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/email_notifier.rb:117:in `block in compose_email'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/base.rb:922:in `collect_responses'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/base.rb:830:in `mail'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/email_notifier.rb:116:in `compose_email'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/email_notifier.rb:42:in `exception_notification'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/base.rb:186:in `process_action'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:97:in `run_callbacks'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/callbacks.rb:19:in `process_action'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/abstract_controller/base.rb:124:in `process'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/rescuable.rb:23:in `block in process'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/rescuable.rb:15:in `handle_exceptions'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/rescuable.rb:22:in `process'
  /app/vendor/bundle/ruby/2.4.0/gems/actionview-5.1.5/lib/action_view/rendering.rb:30:in `process'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/base.rb:609:in `block in process'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `block in instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/notifications.rb:166:in `instrument'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/base.rb:608:in `process'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/message_delivery.rb:105:in `block in processed_mailer'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/message_delivery.rb:104:in `tap'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/message_delivery.rb:104:in `processed_mailer'
  /app/vendor/bundle/ruby/2.4.0/gems/actionmailer-5.1.5/lib/action_mailer/message_delivery.rb:95:in `deliver_now'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier/email_notifier.rb:172:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier.rb:117:in `fire_notification'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier.rb:58:in `block in notify_exception'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier.rb:57:in `each'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notifier.rb:57:in `notify_exception'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notification/rack.rb:51:in `rescue in call'
  /app/vendor/bundle/ruby/2.4.0/gems/exception_notification-4.3.0/lib/exception_notification/rack.rb:40:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
  /app/vendor/bundle/ruby/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
  /app/vendor/bundle/ruby/2.4.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/etag.rb:25:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/conditional_get.rb:25:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/head.rb:12:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/session/abstract/id.rb:232:in `context'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/session/abstract/id.rb:226:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/cookies.rb:613:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:97:in `run_callbacks'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/callbacks.rb:24:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.5/lib/rails/rack/logger.rb:36:in `call_app'
  /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.5/lib/rails/rack/logger.rb:24:in `block in call'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/tagged_logging.rb:69:in `block in tagged'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/tagged_logging.rb:26:in `tagged'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/tagged_logging.rb:69:in `tagged'
  /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.5/lib/rails/rack/logger.rb:24:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/request_id.rb:25:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/method_override.rb:22:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/runtime.rb:22:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.5/lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/executor.rb:12:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/actionpack-5.1.5/lib/action_dispatch/middleware/static.rb:125:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/rack-2.0.4/lib/rack/sendfile.rb:111:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/scout_apm-2.4.18/lib/scout_apm/instruments/middleware_summary.rb:58:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.5/lib/rails/engine.rb:522:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/puma-3.11.2/lib/puma/configuration.rb:225:in `call'
  /app/vendor/bundle/ruby/2.4.0/gems/puma-3.11.2/lib/puma/server.rb:624:in `handle_request'
  /app/vendor/bundle/ruby/2.4.0/gems/puma-3.11.2/lib/puma/server.rb:438:in `process_client'
  /app/vendor/bundle/ruby/2.4.0/gems/puma-3.11.2/lib/puma/server.rb:302:in `block in run'
  /app/vendor/bundle/ruby/2.4.0/gems/puma-3.11.2/lib/puma/thread_pool.rb:120:in `block in spawn_thread'

I've also access to these two parameters :我还可以访问这两个参数:

* rack.request.query_hash                        :{"name"=>"Martin\xE9"}

* rack.request.query_string                      : &name=Martin_

I would like to understand why this error showed up for this particular user and not for the others that also had an accent in their names.我想了解为什么这个错误会出现在这个特定的用户身上,而不是其他名字也有口音的人身上。 Could it be a browser or mailbox related?它可能与浏览器或邮箱有关吗? Is there a way to fix this issue?有没有办法解决这个问题?

You can rescue from this error using StandardError Expection您可以使用 StandardError Expection 从这个错误中解救出来

(Since every error & exception class inherits from StandardError it is sufficient to Rescue) (由于每个错误和异常类都继承自 StandardError,因此足以挽救)

rescue StandardError => e
//redirect to signup page
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM