2013-07-22 2 views
2

나는 바람둥이 아래에서 실행중인 jruby rails 애플리케이션을 사용하고 있습니다. URL의 잘못된 형식의 쿼리 문자열로 인해 랙이 예외 스택 추적이 프로덕션 모드로 표시되어 초크가 발생합니다. 그걸 우아하게 처리 할 수있는 방법이 있나. 난 레일 애플 리케이션에서 생성 된 예외를 처리합니다 config.exception_app 사용할 수 있다고 생각하지 않습니다. 이 경우, 예외는 레일즈 응용 프로그램에 도착하기 전에 생성됩니다. -이 경우는 ... 그냥 설정 SMT 랙 Y를 A (최소) 랙 오류 응용 프로그램을 구성 할 수있을 것입니다 보인다 (require 'my_error_app'; run MyErrorApp 루비 런타임이 부팅되면레일 앱에 도달하기 전에 랙에서 생성 된 예외를 처리하는 방법

org.jruby.exceptions.RaiseException: (ArgumentError) invalid %-encoding (/"{}\%#$()) 
    at Module.decode_www_form_component(jar:file:/usr/local/apache- 
tomcat/webapps/ROOT/WEB-INF/lib/gems-gems-jruby-jars-1.7.3-lib-jruby-stdlib- 
1.7.3.jar!/META-INF/jruby.home/lib/ruby/1.9/uri/common.rb:898) 
    at Rack::Utils.unescape(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/utils.rb:41) 
    at Rack::Utils.parse_nested_query(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/utils.rb:94) 
    at org.jruby.RubyArray.map(org/jruby/RubyArray.java:2361) 
    at Rack::Utils.parse_nested_query(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/utils.rb:94) 
    at org.jruby.RubyArray.each(org/jruby/RubyArray.java:1613) 
    at Rack::Utils.parse_nested_query(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/utils.rb:93) 
    at Rack::Request.parse_query(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/request.rb:332) 
    at Rack::Request.POST(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/request.rb:209) 
    at Rack::MethodOverride.method_override(/usr/local/apache- 
tomcat/webapps/ROOT/WEB-INF/gems/gems/rack-1.4.5/lib/rack/methodoverride.rb:26) 
    at Rack::MethodOverride.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/methodoverride.rb:14) 
    at Rack::Runtime.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/runtime.rb:17) 
    at ActiveSupport::Cache::Strategy::LocalCache::Middleware.call(/usr/local/apache- 
tomcat/webapps/ROOT/WEB-INF/gems/gems/activesupport- 
3.2.13/lib/active_support/cache/strategy/local_cache.rb:72) 
    at Rack::Lock.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-1.4.5/lib/rack/lock.rb:15) 
    at Rack::Cache::Context.forward(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:136) 
    at Rack::Cache::Context.pass(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:143) 
    at Rack::Cache::Context.invalidate(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:155) 
    at Rack::Cache::Context.call!(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:71) 
    at Rack::Cache::Context.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/rack-cache-1.2/lib/rack/cache/context.rb:51) 
    at Rails::Engine.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/railties-3.2.13/lib/rails/engine.rb:479) 
    at Rails::Application.call(/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/gems/gems/railties-3.2.13/lib/rails/application.rb:223) 
    at Rack::Handler::Servlet.call(file:/usr/local/apache-tomcat/webapps/ROOT/WEB- 
INF/lib/gems-gems-jruby-rack-1.1.13.1-lib-jruby-rack- 
1.1.13.1.jar!/rack/handler/servlet.rb:22) 
+0

자바 토지의 기본 설정은 애플리케이션 서버에 500 개의 템플릿을 구성하는 것입니다. 톰캣 – phoet

+0

예외를 가로 채서 처리하도록 랙 미들웨어를 작성했습니다. – DrChanimal

답변

0

다음은 예외)이 jruby.rack.error.app 컨텍스트 매개 변수에 (예를 들어, 당신의 의 web.xml 지저귀와)

+2

이것에 대해 더 많은 정보를 공유 할 수 있습니까? 나는 그것을하는 방법에 대한 예제를 찾을 수 없습니다. 랙 오류 응용 프로그램을 작성하는 방법 및 jruby.rack.error.app 컨텍스트 매개 변수를 사용하는 방법 Jruby-rack github 페이지에 jruby.rack.error.app에 대한 설명이없는 것 같습니다. – DrChanimal

0

내가 정상적으로 예외를 처리하기 위해 랙 미들웨어를 작성 결국있다. MethodOverride 미들웨어 전에 미들웨어를 삽입합니다.이 미들웨어는 예외를 throw합니다.

관련 문제