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



一位用户最近在注册我们的网站时触发了一个错误。

我试图重现错误,但没有成功。我知道"é"字符有问题。对于此特定用户,它未被识别,但已被许多其他用户识别。

从他的用户代理那里,我知道他在IE11上遇到了这个错误。

这是错误的跟踪:

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'

我还可以访问这两个参数:

* rack.request.query_hash                        :{"name"=>"MartinxE9"}
* rack.request.query_string                      : &name=Martin_

我想了解为什么此错误出现在该特定用户身上,而不是针对其他名称中也有重音的用户。可能与浏览器或邮箱有关吗?有没有办法解决这个问题?

您可以使用 StandardError Expection 从此错误中解救出来

(由于每个错误和异常类都继承自 StandardError,因此足以挽救(

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

相关内容

  • 没有找到相关文章

最新更新