2013-08-31 19 views
11

nel mio lavoro in ritardo, ho cercato di creare un file a TMP cartellaMemorizza file nella directory tmp su Heroku Rails

file_path = Rails.root.join('tmp', "#{file_name}." + file_extension); 
exported_file = kit.to_pdf 
# Save file to disk 
File.open(file_path, 'wb') do |file| 
     file << exported_file 
end 

Funziona bene in locale, ma su Heroku c'è un errore in differita Lavoro "No tale file o directory - /app/tmp/test.pdf "

Così come posso risolvere questo problema. Non voglio memorizzare il file in S3. Grazie

risposta

13

Heroku utilizza quello che viene chiamato ephemeral filesystem. Ciò significa che il tuo filesystem locale è accessibile solo a un singolo banco di prova, e una volta che il banco di prova viene fermato, riavviato o spostato, tutti i file sul filesystem locale vengono distrutti.

L'unico modo per il processo di lavoro ritardato di trasferire file in un processo esterno consiste nel memorizzare i file in una posizione più permanente. Questo potrebbe essere S3, un database, file Rackspace, ecc., Ma per Heroku non può essere il filesystem locale.

Tuttavia, se si sta cercando di archiviare il file in una posizione temporanea, è opportuno utilizzare il file system locale. Sembra che potresti avere problemi perché la directory /app/tmp potrebbe non esistere.

Prova ad aggiungere questo alla tua lavoratore:

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

Oppure, aggiungere la directory tmp al repository git.

mkdir tmp 
touch tmp/.keep 
git add tmp/.keep 
git commit -m "Add tmp directory to app repository." 
+0

Grazie, lo memorizzerò in s3 – ZeroX