繁体   English   中英

载波两个缓存文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM