2012-08-11 20 views
5

Ho un'applicazione che legge il contenuto di un file e lo indicizza. Li stavo memorizzando nel disco stesso, ma ora sto usando Amazon S3, quindi il seguente metodo non funziona più.Come ottenere il file reale da S3 utilizzando CarrierWave

E 'stato qualcosa di simile:

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 restituisce il FileUploader, e doc.file.file restituisce la classe CarrierWave::Storage::Fog::File.

Come posso ottenere il file reale?

risposta

9

Chiamando il numero @document.file.read otterrete il contenuto del file da S3 in Carrierwave.

+1

Jacob, dal gruppo di google carrierwave risolto con 'open (@ document.file.url)' anche –

+1

@ document.file.read è probabilmente migliore perché funzionerà indipendentemente dalla memoria di file utilizzata, cioè funziona con entrambi i filesystem locali e S3. –

+0

.read non ha funzionato per noi (stiamo usando il cloud in combinazione con carrierwave) – Tibastral

Problemi correlati