gpt4 book ai didi

ruby-on-rails - Ruby/Rails 神秘的 "undefined constant"问题

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:43 24 4
gpt4 key购买 nike

我有一个 Rails 项目,其中一个常量在处理请求时在某个时刻被破坏。

我正在使用 mime/typesrestclient gem。 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

我可以在第一次调用给定 Controller 操作时访问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 正在通过 require_library_or_gem 加载 mime-types,最终调用 ActiveSupport::Dependencies.autoload_module! 维护一个名为 autoloaded_constants 的表,当 ActionController.close 调用 Dispatcher.cleanup_application 时,该表nuked

修复是首先加载 mime-types,因此它不会自动加载。

*呼*

最佳答案

应要求回答我自己的问题。

在我的配置中:

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! 维护一个名为 autoloaded_constants 的表,当 ActionController.close 调用 Dispatcher.cleanup_application.

修复是首先加载 mime 类型,因此它不是自动加载的。

关于ruby-on-rails - Ruby/Rails 神秘的 "undefined constant"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com