2011-07-18 12 views
5

Estoy creando una aplicación de rieles que permite que un administrador cargue fotos que se muestran de forma opcional públicamente. Para el proceso de carga/almacenamiento, estoy usando la gema Carrierwave junto con la gema Fog y S3. El problema es que para que todo funcione, tengo que hacer público cada archivo cargado en el depósito s3. ¿Hay alguna manera de hacer que los archivos sean públicos/privados archivo por archivo? Además, si esta granularidad de archivo por archivo es posible, ¿puede extenderse a versiones de imágenes (creadas por cambio de tamaño automático de Carrierwave)?Configuración granular 'pública' en archivos cargados con Fog y Carrierwave

Actualmente, tengo la siguiente línea en mi inicializador carrierwave:

config.fog_public = true 
+1

Esta es probablemente mucho -pida que falta la característica en la mayoría de los cargadores de Rails. Sugiero ir con DragonFly, ya que permite un nivel de personalización sin precedentes y es capaz de hacerlo. – kain

+0

Después de solo echar un vistazo rápido a DragonFly, parece apoyar lo que estoy intentando para lograr, y parece ser mucho más flexible que CarrierWave también. Gracias. – dcb

Respuesta

7

En realidad, está muerto simple en Carrierwave.

Usted puede hacer esto:

class PrivateUploader < StandardUploader 

    @fog_public = false 

O (no probado, pero debe funcionar a la perfección) esto:

class PrivateUploader < StandardUploader 


    def fog_public 
    if local_condition 
     true 
    else 
     false 
    end 
    end 

:-)

No he probado FreeBSD, pero ahora que un par de problemas se han solucionado en los últimos 2 meses con Carrierwave, es muy superior a cualquier otra cosa que haya visto. Increíblemente flexible.

// mate

+0

Tenía una configuración anterior y una devolución de llamada de la tienda para lograr esto, estableciendo mi versión original en privado el resto para pu blic Este código ayudó a simplificar mi trabajo inmensamente. Específicamente, para hacer públicas todas las versiones de una carga, excepto el original, ahora uso '! Self.version_name.nil?' Como my 'local_condition' en el código anterior. –

+0

@dcb debe marcar esto como la respuesta aceptada –

5

sólo tienen que hacer su clase cargador de sustituir la clase de base. Rompí mi pelo también hoy .. :(Esto funcionó para mí:

Usando Carrierwave 0.8.0 (mayo de 2013) /app/uploaders/whatever_uploader.rb

class WhateverUploader < CarrierWave::Uploader::Base 
    def fog_public 
    true # or false 
    end 
end 
+1

bingo bango bongo – diclophis

Cuestiones relacionadas