Автозагрузка рельсов не выбирает залатанный обезьяной класс
Я работаю над приложением 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
класс, потому что у меня нет много информации о вашем приложении.