@aaltqna

Как клонировать StringIO?

Я создаю эксель файл и передаю его в мейлер. Он создается как StringIO.

В мейлере файл 2 раза должен быть прочитан:
1) В моем коде, перед добавлением его в attachments
2) В коде s3, туда я передаю просто StringIO, а они уже сами где-то прочитают.

Проблема в том, что стоит хотя бы раз выполнить .read на этом объекте, то в последующие разы он будет уже пустой. Вот что я нашел - https://bugs.ruby-lang.org/issues/11445?tab=history . Ответа нет, но как пример пойдет.

Как его вообще клонировать тогда? Файл остается "скрепленным" с его копией даже, если в мейлер передавать разные параметры изначально, типа:
UserMailer.with(
  file1: file,
  file2: file
).hello_email.deliver_now


Если я делаю file1.read, то file2.read уже вернет "".
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@GeneAYak
Его не нужно клонировать, он работает как и любой файловый дескриптор, по сути указатель, который находится в определенном месте документа. Когда происходит чтение, он сдвигается, и если нужно прочитать заново, то нужно этот самый указатель передвинуть в начало файла через метод .seek(0)
https://ruby-doc.org/stdlib-2.6.3/libdoc/stringio/...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы