2012-08-11 12 views
5

Tengo una aplicación que lee el contenido de un archivo y lo indexa. Los estaba almacenando en el disco, pero ahora estoy usando Amazon S3, por lo que el siguiente método ya no funciona.Cómo obtener el archivo real desde S3 usando CarrierWave

fue algo como esto:

def perform(docId) 
    @document = Document.find(docId) 
    if @document.file? 

     #You should't create a new version 
     @document.versionless do |doc| 
     @document.file_content = Cloudoc::Extractor.new.extract(@document.file.file) 
     @document.save 
     end 

    end 
    end 

@document.file devuelve el FileUploader y doc.file.file devuelve la clase CarrierWave::Storage::Fog::File.

¿Cómo puedo obtener el archivo real?

Respuesta

9

Llamando @document.file.read obtendrá el contenido del archivo de S3 en Carrierwave.

+1

Jacob, de carrierwave google group resuelto con 'open (@ document.file.url)' too –

+1

@ document.file.read es probablemente mejor porque funcionará independientemente del almacenamiento de archivos utilizado, es decir, funciona con el sistema de archivos local y S3. –

+0

.read no funcionó para nosotros (estamos usando cloudinary en combinación con carrierwave) – Tibastral

Cuestiones relacionadas