ruby-on-rails – 使用Ruby / 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.在第二次调用中,没有了. 我仍然可以使用MIME :: Types.type_for,但是添加的方法是简单的,所以当我尝试使用RestClient模块时,它会在stringify_headers中的第一行显示一个异常: NoMethodError,message: undefined method `type_for_extension' for MIME::Types:Class **这怎么可能?与stringify_headers在同一文件中定义的type_for_extension;后者怎么可以得到忍者,但不是前者? 编辑:固定! 在我的配置: config.gem "aws-s3",:version => ">= 0.6.2",:lib => "aws/s3" config.gem 'mime-types',:lib => 'mime/types' aws-s3通过require_library_or_gem加载mime-types,最终调用了ActiveSupport :: Dependencies.autoload_module!当ActionController.close调用Dispatcher.cleanup_application时,它维护一个名为autoloaded_constants的表. 修复是首先加载mime类型,所以它不是自动加载的. *呼* 解决方法
按要求回答我自己的问题.
在我的配置: config.gem "aws-s3",:lib => 'mime/types' aws-s3库正在加载mime-types通过require_library_or_gem,所以它不是自动加载的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |