У меня есть простой одностраничный PDF-файл с возможностью поиска, который загружается в модель приложения Rails 6 (Car) с помощью Active Storage. Я могу извлечь текст из PDF с помощью гемов tempfile и pdf-reader в консоли Rails:
> @car.creport.attached?
=> true
> f = Tempfile.new(['file', '.pdf'])
> f.binmode
> f.write(@car.creport.blob.download)
> r = PDF::Reader.new(f.path.to_s)
> r.pages[1].text
=> "Welcome to the ABC Car Report for January 16, 20...
Но если я попробую то же самое в методе create моего cars_controller.rb, это не сработает:
# cars_controller.rb
...
def create
@car = Car.new(car_params)
@car.filetext = ""
f = Tempfile.new(['file', '.pdf'])
f.binmode
f.write(@car.creport.blob.download)
r = PDF::Reader.new(f.path.to_s)
@car.filetext = r.pages[1].text
...
end
Когда я запускаю приложение Rails, я могу создать новый автомобиль и выбрать файл PDF для прикрепления. Но когда я нажимаю «Отправить», я получаю FileNotFoundError в cars_controller.rb в строке f.write ().
Мой инстинкт подсказывает, что контроллер пытается прочитать большой двоичный объект, чтобы записать его во временный файл слишком рано (то есть еще до того, как этот большой двоичный объект был записан). Я попытался вставить sleep(2)
, чтобы дать время, но получаю ту же ошибку FileNotFoundError.
Любые идеи?
Спасибо!