Автозагрузка рельсов не выбирает залатанный обезьяной класс

Я работаю над приложением Rails 3 (в частности, 3.2.13) на ruby ​​1.9.3-p392.

В одном из моих контроллеров действие "создать" может получить изображение (как ActionDispatch::Http::UploadedFile)

Я пытаюсь monkeypatch ActionDispatch::Http::UploadedFile, переопределяя его метод as_json, чтобы он возвращал путь к временному файлу вместо самого объекта File временного файла.

Причина, по которой я это делаю, заключается в том, что у меня есть регистратор базы данных, который сериализует контекст журнала (который включает параметры запроса), вызывая to_json для контекста. Проблема в том, что вызов to_json в указанном классе дает массу двоичных данных, которые заполняют мой журнал.

Итак, я создал следующую структуру каталогов в "lib": "action_dispatch/http/uploaded_file.rb" Внутри этого файла класс называется ActionDispatch::Http::UploadedFile

Я также добавил папку lib в application.rb:config.autoload_paths += Dir["#{config.root}/lib"]

Проблема в том, что рельсы не загружают мой залатанный обезьяной класс. Если я добавлю require "action_dispatch/http/uploaded_file"к началу моего файла контроллера все работает отлично.

Почему Rails не загружает мой залатанный обезьяной класс? Структура каталогов и именование классов соответствуют соглашениям Rails.

2 ответа

Переместите свой код в config/initializers/your_filename.rb файл. Код в этих файлах загружается во время загрузки приложения Rails.

Это в общем. Но я не уверен, почему вы хотите, чтобы обезьяна-патч ActionDispatch::Http::UploadedFile класс, потому что у меня нет много информации о вашем приложении.

Пытаться

config.autoload_paths += ["#{config.root}/lib"]
Другие вопросы по тегам