2013-10-08 15 views
7

ho bisogno di usare la cartella tmp su Heroku (cedro) per la scrittura di alcuni dati temporaneamente, sto cercando di farlo in questo modo:Heroku - come scrivere nella directory "tmp"?

open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file| 
    file.write open(image_url).read 
end 

Ma questo errore prodotti

Errno::ENOENT: No such file or directory - /app/tmp/image-2.png 

sto cercando questo codice e funziona correttamente su localhost, ma non posso farlo funzionare su Heroku.

Qual è il modo corretto di salvare alcuni file nella directory tmp su Heroku (stack Cedar)?

Grazie

EDIT: sto metodo in esecuzione con Jobs differiti che ha bisogno di ha accesso al file tmp.

EDIT2: Quello che sto facendo:

files.each_with_index do |f, index| 
     unless f.nil? 
     result = JSON.parse(buffer) 
     filename = "#{Time.now.to_i.to_s}_#{result['filename']}" # thumbnail name 
     thumb_filename = "#{Rails.root}/tmp/#{filename}" 

     image_url = f.file_url+"/convert?rotate=exif" 

     open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file| 
      file.write open(image_url).read 
     end 

     img = Magick::Image.read(image_url).first 
     target = Magick::Image.new(150, 150) do 
      self.background_color = 'white' 
     end 
     img.resize_to_fit!(150, 150) 
     target.composite(img, Magick::CenterGravity, Magick::CopyCompositeOp).write(thumb_filename) 

     key = File.basename(filename) 
     s3.buckets[bucket_name].objects[key].write(:file => thumb_filename) 

     # save path to the new thumbnail to database 
     f.update_attributes(:file_url_thumb => "https://s3-us-west-1.amazonaws.com/bucket/#{filename}") 
     end 
    end 

ho in informazioni di database su immagini. Queste immagini sono memorizzate nel secchio Amazon S3. Devo creare miniature per queste immagini. Quindi sto esaminando un'immagine con un'altra immagine, caricando l'immagine, salvandola temporaneamente, quindi ridimensionandola e successivamente caricherò questa miniatura nel secchio S3.

Ma questa procedura non sembra funzionare su Heroku, quindi, come potrei farlo (la mia app è in esecuzione su Heroku)?

+0

Poiché si dice che non esiste una directory in questa patch, forse si dovrebbe creare prima di usare? O vuoi sapere dove è il tmp standard su heroku? – fotanus

+0

ricorda che heroku ha serie limitazioni sul file system! https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem – phoet

+0

Anche se una richiesta per l'app ha creato un file tmp, il file è molto probabilmente andato, se i lavori in ritardo arrivano più tardi. – spickermann

risposta

9

È /tmp incluso nel repository git? Rimosso nel tuo .slugignore? La directory potrebbe non esistere su Heroku.

Prova lancio in un rapido mkdir prima della scrittura:

Dir.mkdir(File.join(Rails.root, 'tmp')) 

o anche in un inizializzatore o qualcosa del genere ...

+6

'Rails.root.join ('tmp')' – phoet

+0

Bello, non mi ero reso conto che 'root' fosse un' Pathname'. Anche meglio. –

Problemi correlati