0

我正在开发 ruby​​ 1.9.3-p392 上的 Rails 3 应用程序(特别是 3.2.13)。

在我的一个控制器中,“创建”操作可以接收图像(作为 ActionDispatch::Http::UploadedFile)

我试图通过覆盖其 as_json 方法来猴子修补 ActionDispatch::Http::UploadedFile 以返回临时文件路径而不是临时文件文件对象本身。

我这样做的原因是因为我有一个数据库记录器,它通过在上下文上调用 to_json 来序列化日志上下文(包括请求参数)。问题是在所述类上调用 to_json 会产生大量二进制数据,这些数据会填满我的日志。

所以我在“lib”下创建了以下目录结构:“action_dispatch/http/uploaded_file.rb” 在这个文件中,类被命名为ActionDispatch::Http::UploadedFile

我还通过以下方式将 lib 文件夹添加到 application.rb: config.autoload_paths += Dir["#{config.root}/lib"]

问题是 rails 没有加载我的猴子补丁类。如果我添加require "action_dispatch/http/uploaded_file"到我的控制器文件的顶部,一切正常。

为什么 Rails 不自动加载我的猴子补丁类?目录结构和类命名符合 Rails 约定。

4

2 回答 2

1

将您的代码移动到config/initializers/your_filename.rb文件中。这些文件中的代码是在 Rails 应用程序启动过程中加载的。

大体上是这样。但我不确定你为什么要猴子补丁ActionDispatch::Http::UploadedFile类,因为我没有太多关于你的应用程序的信息。

于 2013-04-28T21:54:25.730 回答
0

尝试

config.autoload_paths += ["#{config.root}/lib"]
于 2013-06-27T07:47:00.320 回答