2011-07-16 5 views
13

요청을 처리하는 동안 상수가 중단되는 레일스 프로젝트가 있습니다.루비/레일즈에서 "정의되지 않은 상수"문제가 발생했습니다

나는 mime/typesrestclient 보석을 사용하고 있습니다. restclient 모듈은 MIME의 확장자를 정의하며 여기에는 type_for_extension 메서드가 포함됩니다.

module RestClient 
    ... 
    def stringify_headers headers 
     result[key] = target_values.map { |ext| MIME::Types.type_for_extension(ext.to_s.strip) }.join(', ') 
     ... 
    end 
    end 
end 

module MIME 
    class Types 
    def type_for_extension ext 
     candidates = @extension_index[ext] 
     candidates.empty? ? ext : candidates[0].content_type 
    end 
    class << self 
     def type_for_extension ext 
     @__types__.type_for_extension ext 
     end 
    end 
    end 
end 

나는 주어진 컨트롤러 액션의 내 처음 호출MIME::Types.type_for_extension에 액세스 할 수 있습니다. 두 번째 호출에서 사라졌습니다. 이 얼마나

NoMethodError, message: undefined method `type_for_extension' for MIME::Types:Class 

을 ** :

난 아직도 MIME::Types.type_for를 사용할 수 있지만 추가 방법은 간단하게 사라지고, 그래서 나는 위해 RESTClient 모듈을 사용하려고 할 때 stringify_headers에 나와 서 라인에 예외를 throw 가능한? type_for_extension동일한 파일에 정의 된대로 stringify_headers; 후자가 어떻게 핵무기를 만들지 만 이전 핵을 만들지는 못했을까요?


편집 : IT를 고정! 내 설정에서

: 궁극적 인 테이블이 ActionController.close 전화 Dispatcher.cleanup_application을 핵 공격이다 autoloaded_constants이라고 유지 ActiveSupport::Dependencies.autoload_module!를 호출

config.gem "aws-s3", :version => ">= 0.6.2", :lib => "aws/s3" 
config.gem 'mime-types', :lib => 'mime/types' 

aws-s3require_library_or_gem를 통해 mime-types로드하는

.

처음에는 mime-types을로드하는 것이므로 자동로드되지 않습니다.

* 휴 *

+13

귀하의 편집 권한이 답변으로 인정됩니다. 당신은 당신 자신의 질문에 답하는 것을 허락 받았고 나는 그와 같이 까다로운 것에 대한 대답에 반대하는 사람은 없을 것이라고 생각합니다. –

+0

@Mud 다행스럽게도 문제를 해결할 수있었습니다. – buruzaemon

+1

뮤와 동의하십시오. 질문에 대한 답변으로 솔루션을 추가하고 최상의 답을 표시하십시오. 자신의 질문에 대답하는 것은 확실히 허용됩니다 :) – Emily

답변

3

요청에 의해 내 자신의 질문에 대답.

config.gem "aws-s3", :version => ">= 0.6.2", :lib => "aws/s3" 
config.gem 'mime-types', :lib => 'mime/types' 

aws-s3 라이브러리가 궁극적으로 ActionController.close 전화 Dispatcher.cleanup_application.

수정이 마임을로드 할 때 테이블이 핵 공격을하는 autoloaded_constants이라고 유지 ActiveSupport::Dependencies.autoload_module!를 호출 require_library_or_gem 통해 mime-types을로드하는 내 설정에서

-types 먼저, 그래서 그것은 자동으로로드되지 않습니다.

관련 문제