2011-07-16 19 views
13

リクエストを処理している間に定数がヌークされているRailsプロジェクトがあります。Ruby/Railsで「定義されていない定数」問題が発生する

私はmime/typesrestclientの宝石を使用しています。 restclientモジュールは、方法type_for_extensionを含むMIMEの拡張子を定義します。

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にアクセスすることができます。 2回目の呼び出しで、それはなくなりました。これをどのように

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

を**:

私はまだMIME::Types.type_forを使用できますが、追加の方法は、単純になくなっているので、私はRestClientモジュールを使用しようとすると、それはstringify_headersでshowinラインで例外がスローされます可能? type_for_extension同じファイルとしてstringify_headersと定義されています。後者はどのようにして元通りになることができましたか?


EDIT:FIXED IT!私の設定で

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

aws-s3は究極のテーブルがActionController.closeDispatcher.cleanup_applicationを呼び出すときを被爆されautoloaded_constantsと呼ば維持ActiveSupport::Dependencies.autoload_module!を呼び出さrequire_library_or_gem経由mime-typesを、ロードしました。

最初にmime-typesをロードしていたので、自動ロードされませんでした。

*やれやれ*

+13

私はあなたの編集が答えになると言います。あなたはあなた自身の質問に答えることが許されており、誰かがそのようなトリッキーなものに対する答えに反対するのではないかと疑う。 –

+0

@マッドグッドあなたは問題を解決することができました。 – buruzaemon

+1

ミューと同意する。質問への回答としてあなたの解決策を追加して、最良の回答としてください。あなた自身の質問に答えることは間違いありません:) – Emily

答えて

3

要求によって自分の質問に答えます。私の設定で

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

aws-s3ライブラリが最終的にテーブルを維持ActiveSupport::Dependencies.autoload_module!ActionController.close通話Dispatcher.cleanup_application.

修正がパントマイムをロードするようにしたとき、被爆されautoloaded_constantsと呼ばれる呼び出され、require_library_or_gem経由mime-typesをロードしました-typeが最初にあるので、オートロードされていません。

関連する問題