Временные файлы исчезают при обработке CarrierWave - PullRequest
0 голосов
/ 30 августа 2018

Я создал ActiveJob для обработки загрузок моей несущей. Однако, когда я загружаю более одного изображения, я получаю следующую ошибку для второго файла:

Errno::ENOENT (No such file or directory @ rb_sysopen - C:/Users/tdavi/AppData/Local/Temp/RackMultipart20180830-392-z2s2i.jpg)

Вот код в моем контроллере:

if @post.save
  files = params[:post_attachments].map { |p|
    {image: p['photo'][:image].tempfile.path, description: p['photo'][:decription]}
  }
  ProcessPhotosJob.perform_later(@post.id, files.to_json)
  format.html { render :waiting }
end

И мой ActiveJob

require 'json'

class ProcessPhotosJob < ApplicationJob
  queue_as :default

  def perform(post_id, photos_json)
    post = Post.friendly.find(post_id)
    photos = JSON.parse photos_json

    photos.each do |p|
        src_file = File.new(p['image'])
        post.post_attachments.create!(:photo => src_file, :description => p[:description])
    end

    post.processed = true
    post.save
  end
end

Когда я загружаю только один файл, он работает нормально.

1 Ответ

0 голосов
/ 30 августа 2018

Вы не должны передавать Tempfile в очереди работ.

Прежде всего - TempFiles могут быть автоматически удалены с помощью Ruby ( документы , объяснение )

Если вы хотите загрузить файл (ы) и обработать их позже (в фоновом режиме), я бы посоветовал вам проверить этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...