Код, ответственный за это, находится в классе Buffer в open-uri. Он начинается с создания объекта StringIO и создает фактический временный файл в локальной файловой системе только тогда, когда данные превышают определенный размер (10 КБ).
Я предполагаю, что любые данные, загружаемые тестом, достаточно малы, чтобы их можно было хранить в StringIO, а изображения, которые вы используете в реальном приложении, достаточно велики, чтобы гарантировать наличие файла TempFile. Решение состоит в том, чтобы использовать методы, которые являются общими для обоих классов, в частности метод read, с MiniMagick :: Image # from_blob:
temp_image = MiniMagick::Image.from_blob(open(self.public_filename, &:read))
Это может помочь ответить на ваш вопрос из FAQ :
Безопасно ли для потоков изменять значения элементов после извлечения из кэша?
Помните, что значение в элементе кэша является глобальным доступный из нескольких потоков. Изменение значения изначально небезопасно для потоков. Безопаснее получить значение, удалить элемент кеша и затем повторно вставить значение.
(выделено мной)