私はRailsプロジェクトを持っています.Railsプロジェクトでは、リクエストを処理しているときに定数が削除されています.
mime/types
とrestclient
gemsを使用しています。モジュールは、メソッドを含む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
アクセスできます。2回目の呼び出しで、それはなくなりました。
まだ使用できますMIME::Types.type_for
が、追加されたメソッドは単純になくなっているため、RestClient モジュールを使用しようとすると、showin in の行で例外がスローされstringify_headers
ます。
NoMethodError, message: undefined method `type_for_extension' for MIME::Types:Class
**これはどのように可能ですか? と同じファイルでtype_for_extension
定義されています。後者は核攻撃を受けて、前者は核攻撃を受けないのはどうしてですか?stringify_headers
編集:修正しました!
私の設定では:
config.gem "aws-s3", :version => ">= 0.6.2", :lib => "aws/s3"
config.gem 'mime-types', :lib => 'mime/types'
aws-s3
mime-types
を介してロードしていましrequire_library_or_gem
た。最終的に呼び出されたのは、呼び出されたときにnukedさActiveSupport::Dependencies.autoload_module!
れるテーブルを維持する呼び出しです。autoloaded_constants
ActionController.close
Dispatcher.cleanup_application
修正はmime-types
最初にロードすることだったので、自動ロードされません。
*うわー*