CarrierWave 处理时临时文件消失
Temp files disappears when CarrierWave processing
我创建了一个 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
当我只上传一个要上传的文件时,它工作正常。
您不应将 Tempfile 传递给排队的作业。
首先 - TempFiles 可以通过 Ruby (docs, )
自动删除
如果您想上传文件并稍后(在后台)处理它们,那么我建议您检查 this question。
我创建了一个 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
当我只上传一个要上传的文件时,它工作正常。
您不应将 Tempfile 传递给排队的作业。
首先 - TempFiles 可以通过 Ruby (docs,
如果您想上传文件并稍后(在后台)处理它们,那么我建议您检查 this question。