我有一个 Rails 项目,其中一个常量在服务请求时会在某个时候被核对。
我正在使用mime/types
和restclient
宝石。该模块定义了一个包含方法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
在第一次调用给定的控制器操作时访问。在第二次调用时,它消失了。
我仍然可以使用MIME::Types.type_for
,但是添加的方法已经消失了,所以当我尝试使用 RestClient 模块时,它会在显示的行中引发异常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
,最终调用ActiveSupport::Dependencies.autoload_module!
它维护一个调用的表,调用时autoloaded_constants
被核弹。ActionController.close
Dispatcher.cleanup_application
修复是先加载mime-types
,所以它不会自动加载。
*呼*