@bydmm 用
@photo.image = File.open(extract_output_path) @photo.save
把提取的图片遍历执行上述操作(会重新上传一次到 cache 再到 server,创建 documents),图片一多耗时会很长,即便异步也有点累赘
railscasts 找到案例了 谢谢回复
是因为指派了一个不存在的 queue "high" 导致 perform 不执行 在 c 或 m 里测试好了,再移到 worker 即可 thx for reply
https://github.com/carrierwaveuploader/carrierwave 有关 Large files 段(上边引用的),我是否理解错了?? 改为 move_to = true,会否增加上传耗时?
def move_to_cache
true
end
def move_to_store
true
end
By default, CarrierWave copies an uploaded file twice, first copying the file into the cache, then copying the file into the store. For large files, this can be prohibitively time consuming.
这里写 copy twice,我上传时注意了下 public/photos/tmp 目录,显示生成了 cache 然后传到 server 接着 cache 删除了(是 move 吧?)
我在 uploader 里添加
def move_to_cache
true
end
def move_to_store
true
end
cache 就保留下来了,但是 wiki 里是这样
When the move_to_cache and/or move_to_store methods return true, files will be moved (instead of copied) to the cache and store respectively.
@ruby_sky 如果默认是 copy 那 cache 不应改清掉,设置 move_to = true 反而表面上让我感觉是 copy? 请简单描述下 CarrierWave 上传流程(文件 -》cache -》server?) cc @Martin91
@birdfrank 按下实现了转化后图片的上传,怎么异步来执行 def extract_images 呢??我安装了 sidekiq
# pdfmodel
after_create :extract_images
def extract_images
# extract
@photo = self.photos.new
@photo.image = File.open(extract_output_path)
@photo.save
end
感觉现在逻辑也可行
# pdfuploader
after :cache, :docsplit
def docsplit
# convert images output cache pach
end
# doc model
field :images, :type => Array, :default => []
mount_uploader :file, PdfUploader
# docs c
def create
@doc.images = # 取出uploads cache路径下所有images
@doc.save
end
@bydmm @doc.images = file_path 即可吗?上传时给的是FILE
@birdfrank 同上, 现在 convert_images 是在 pdfUploader 里 after:cache 做的,此时还没有@doc.save(看到 after:store 后 carrierwave 把 cache 删掉了,就只有 store(七牛)里有 ppt 文件了)
@bydmm 服务器生成的 PDF,XML 之类 想通过 carrierwave 上传文件到 store 的逻辑移到七牛
user.avatar = you_file #这个只有文件路径,而且多个文件,怎么处理?是否直接用carrierwave部分逻辑更直接?
@user.save
carrierwave 把文件移到 store,没有现成的方法可用吗? @Rei
@birdfrank sorry,没说清楚。是有 gem 的,已经安装,可以上传然后 cache 到 store(七牛) 我是想把服务器生成的文件也 move_to store 里,carrierwave 有没有现成的方法??
@zqalyc 呃,carrierwave 考虑到大文件上传,可以关闭 cache store
def move_to_cache
false
end
def cache!(new_file)
107 new_file = CarrierWave::SanitizedFile.new(new_file)
108
109 unless new_file.empty?
110 raise CarrierWave::FormNotMultipart if new_file.is_path? && ensure_multipart_form
111
112 with_callbacks(:cache, new_file) do
113 self.cache_id = CarrierWave.generate_cache_id unless cache_id
114
115 @filename = new_file.filename
116 self.original_filename = new_file.filename
117
118 if move_to_cache
119 debugger #调试进到这里,但cache_path = true,这里是否应该是路径str?
120 @file = new_file.move_to(cache_path, permissions)
121 else
@Martin91 应该不是,几天前的我才刚清掉,没理由刚上传的 tmp 里就没有吧?
By default, CarrierWave copies an uploaded file twice, first copying the file into the cache, then copying the file into the store.
@ericguo 这里说的就是啊,我没动过 code,没设置过
def move_to_cache
true
end
我就是把 public/uploads/tmp 清空了
thx bros,受限于 redis 版本,升级为 2.13.1 后,有了 daemon,问题 fixed
sidekiq-2.5.3
@jjym 怎么说,请直接给出命令吧