2013-08-31 19 views
11

In meinem Verzögerte Job, habe ich versucht, eine Datei zu erstellen Ordner tmpSpeicherdatei im Verzeichnis tmp auf 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 

Es funktioniert gut in lokalen aber auf Heroku gibt es einen Fehler in Delayed Job „Nein solche Datei oder Verzeichnis - /app/tmp/test.pdf "

So, wie ich dieses Problem lösen kann. Ich möchte keine Datei in S3 speichern. Danke

Antwort

13

Heroku verwendet, was ein ephemeral filesystem genannt wird. Dies bedeutet, dass Ihr lokales Dateisystem nur für einen einzelnen Prüfpunkt zugänglich ist. Sobald der Prüfpunkt gestoppt, neu gestartet oder verschoben wurde, werden alle Dateien im lokalen Dateisystem zerstört.

Die einzige Möglichkeit für Ihren verzögerten Jobprozess, Dateien an einen externen Prozess zu übertragen, wäre, die Dateien an einem dauerhafteren Ort zu speichern. Dies könnte S3, eine Datenbank, Rackspace-Dateien usw. sein, aber für Heroku kann es nicht das lokale Dateisystem sein.

Wenn Sie jedoch nur versuchen, die Datei an einem temporären Scratch-Speicherort zu speichern, ist es in Ordnung, das lokale Dateisystem zu verwenden. Offenbar haben Sie möglicherweise Probleme, da das Verzeichnis /app/tmp möglicherweise nicht vorhanden ist.

versuchen, dies zu Ihren Arbeitern und fügen hinzu:

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

Oder fügen Sie das tmp Verzeichnis zu Ihrem Git Repository.

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

Vielen Dank, ich werde in s3 speichern – ZeroX