[英]Carrierwave two cache files
我正在将carrierwave与jquery fileupload一起使用来上传声音文件。 我更改了缓存目录,但不知道为什么会创建两次。 这是我的sound_uploader.rb:
# encoding: utf-8
require 'carrierwave/processing/mime_types'
class SoundUploader < CarrierWave::Uploader::Base
store :file
after :cache, :after_cache
before :store, :before_store
after :store, :after_store
def after_cache(file)
puts 'AFTER CACHE'
end
def before_store(file)
puts 'BEFORE STORE'
end
def after_store(file)
puts 'AFTER STORE'
end
def cache_dir
"#{Rails.root}/tmp/uploads"
end
def store_dir
"#{Rails.root}/uploads/files/#{model.user_id}/#{model.id}"
end
end
它在控制台中返回我:
AFTER CACHE
AFTER CACHE
BEFORE STORE
AFTER STORE
加上它创建了具有不同cache_id的2个缓存文件夹,而我无法删除第一个缓存文件。
编辑:我把我的SoundController
def create
puts 'HELLO WORLD!'
...
end
我注意到结果是:
AFTER CACHE
HELLO WORLD!
AFTER CACHE
BEFORE STORE
AFTER STORE
这意味着它会在实际创建声音之前将文件放入缓存。 我仍然不明白为什么,但这可能是解决我的问题的线索。
当您将load_and_authorize_resource添加到控制器时,您可能忘记了删除该行
@sound = Sound.new(params[:sound])
从create动作中执行,这将导致资源被加载两次。 这也使Carrierwave两次将文件移动/复制到缓存中。
否则,避免了load_and_authorize_resource的create动作后,您的代码将无法正常工作。
我刚刚发现这条线是我的问题负责。 我将详细调查原因并在此之后编辑我的帖子,但是问题出在CanCan gem
class SoundsController < ApplicationController
load_and_authorize_resource
...
end
我改变:
load_and_authorize_resource :except => [:create]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.