2009-10-26 1 views
0

XML 요청을 처리하는 만들기 작업이 있습니다. 내장 된 params 해시를 사용하는 대신 Nokogiri를 사용하여 XML 스키마에 대해 XML의 유효성을 검사합니다. 이 유효성 검사가 통과되면 나중에 처리하기 위해 원시 XML이 저장됩니다.비활성화/사용자 지정 params_parser/작업

필자가 이해하는 한, XML은 두 번 구문 분석됩니다. 먼저 레일즈가 params 해시를 생성 한 다음 Nokogiri 구문 분석이 발생합니다. 나는 일을 빠르게하기 위해 params 구문 분석을 비활성화하는 방법을 찾고 있었지만 아무것도 발견하지 못했습니다.

ActionController::Base.param_parsers[Mime::XML] = lambda do |body| 
    # something 
end 

내가 위의 같은 것을 사용하여 일반적으로 구문 분석 XML의 PARAMS을 사용자 정의 할 수 있습니다 알고,하지만 난 다른 컨트롤러의 기본 동작에 따라 달라집니다.

조치별로 params 구문 분석을 무시할 수 있습니까? 어떤 옵션이 있습니까?

도움 주셔서 감사합니다.

답변

2

저는 Rails Metal을 사용하여 문제를 해결할 수있었습니다. 관련 부분은 다음과 같습니다.

class ReportMetal 
    def self.call(env) 
    if env["PATH_INFO"] =~ /^\/reports/ 
     request = Rack::Request.new(env) 
     if request.post? 
     report = Report.new(:raw_xml => request.body.string) 
     if report.save # this triggers the nokogiri validation on raw_xml 
      return [201, { 'Content-Type' => 'application/xml' }, report.to_xml] 
     else 
      return [422, { 'Content-Type' => 'application/xml' }, report.errors.to_xml] 
     end 
     end 
    end 
    [404, { "Content-Type" => "text/html" }, "Not Found."] 
    ensure 
    ActiveRecord::Base.clear_active_connections! 
    end 
end 

고마워요!

추 신 : Apache Bench와 함께 개발 한 Naive 벤치마킹은 표준 레일의 경우 초 당 22.62 요청과 Metal 버전의 경우 초당 57.60 요청을 보여줍니다.

+0

이것은 내가 필요한 것 같습니다 :) 감사합니다! –

+0

확인 됨 - 작동 함 - 다시 한 번 감사드립니다! –