rails autoload没有选择猴子修补课程

时间:2013-04-28 21:47:20

标签: ruby-on-rails autoload monkeypatching

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

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

我试图通过覆盖其as_json方法来monkeypatch ActionDispatch :: Http :: UploadedFile,以返回tempfile路径,而不是tempfile文件对象本身。

我这样做的原因是因为我有一个数据库记录器,通过在上下文中调用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约定。

2 个答案:

答案 0 :(得分:1)

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

总的来说。但是我不确定你为什么要修补ActionDispatch::Http::UploadedFile课程,因为我没有太多关于你的应用的信息。

答案 1 :(得分:0)

config.autoload_paths += ["#{config.root}/lib"]