2016-09-04 6 views
0

Ich erstelle dynamisch Ordner mit Bildern in meinem öffentlichen Verzeichnis, das ungefähr so ​​aussieht public/indiv/compa/ferfw432ervr12/test.png. Ich möchte das Verzeichnis indiv löschen. Ich habe versucht, Heroku Run Bash zu tun. und verwendete rm, um das Verzeichnis zu löschen. Ich tat ls nach und ich konnte die Datei nicht finden, also dachte ich, dass alles gut war, aber ich konnte das Bild noch sehen, wenn ich zur URL gehe, also tat ich heroku run bash und die Akten sind noch dort. Ich will, dass sie weg sind.Wie lösche ich statische Dateien oder Verzeichnisse von Heroku?

Ich habe auch so etwas wie dieses:

var deleteFolderRecursive = function(path) { 
    if(fs.existsSync(path)) { 
    fs.readdirSync(path).forEach(function(file,index){ 
     var curPath = path + "/" + file; 
     if(fs.lstatSync(curPath).isDirectory()) { // recurse 
     deleteFolderRecursive(curPath); 
     } else { // delete file 
     fs.unlinkSync(curPath); 
     } 
    }); 
    fs.rmdirSync(path); 
    } 
}; 

Es sieht es Dateien aus lokalen gelöscht, aber nicht Heroku, auch nachdem ich tat git push heroku master

Antwort

1

Sie müssen verstehen, wie ephemeral filesystem Werke Heroku.

Welche Dateien Sie auch an Heroku schicken, existiert im Dateisystem eines jeden ausgeführten Dynos. Es klingt wie ein Web-Dyno, das dynamisch ein Verzeichnis mit verschiedenen Bilddateien erstellt. Wahrscheinlich keine gute Idee auf Heroku, es sei denn, Sie benötigen diese dynamisch generierten Dateien nur für die Dyno-Instanz, die sie erstellt hat, und nur für die Dauer der current cycle dieser Dyno-Instanz. Es ist sehr unwahrscheinlich, dass Sie einen Anwendungsfall haben, der das wirklich rechtfertigt, aber sagen wir, Sie tun es. Ein "heroku run bash" zu erstellen und einfach eine neue, "einmalige" Dyno-Instanz zu erstellen, die ein eigenes ephemeres Dateisystem hat, das vollständig von dem ephemeren Dateisystem Ihres Web-Dynos getrennt ist. Das Löschen einer Datei oder eines Verzeichnisses in Ihrem Einzeldokument hat also keinerlei Auswirkungen auf das Verhalten Ihres Web-Dynos.

+0

'Es ist sehr unwahrscheinlich, dass Sie einen Anwendungsfall haben, der das wirklich rechtfertigt. Ich werde Ihnen sagen, warum ich es mache. vielleicht kannst du mir sagen, ob es "gerechtfertigt" ist oder ich werde dir nur mehr Informationen geben. Ich benutze den Feed-Dialog auf Facebook für eine Rezensionsseite. Nachdem der Benutzer eine Rezension eingegeben und auf die fb share-Taste geklickt hat, wird "fb.api" ausgelöst. Dort sage ich, dass es ein Bild finden soll, das gerade auf der Schaltfläche "share" geklickt wurde. Ich sage der FB API, dass sie zu dem einzelnen Bild gehen soll, das gerade erstellt wurde. Ich dachte, das wäre gut, da es Standard ist, Bilder in öffentlichen Ordnern zu behalten. . –

+0

Ich denke du sagst, dass ich die Bilder nicht auf heroku setzen soll. Ich denke, du sagst, wenn ich mehrere Dynos habe, würde es Probleme verursachen. sollte ich stattdessen etwas wie http://cloudinary.com/ verwenden. Ich muss sicherstellen, dass die Bilder in Cloudinary geladen werden, bevor FB API aufgerufen wird. BTW, ich löschte die Dateien mit "fs-Pfad" npmj –

+0

Wie Sie richtig erwähnt haben, funktioniert die Verwendung des ephemeren Dateisystems nicht, wenn Sie mehrere Dynos haben, und wird nicht zuverlässig für Ihren Anwendungsfall sogar mit einem Prüfstand sein, Da Ihr One-Dynode jederzeit ohne Warnung recyceln kann und die von Ihnen gespeicherte Datei nicht mehr vorhanden ist. Sie sollten einen externen Backing-Service für Ihre Bilder verwenden. Ich bin mit cloudinary.com nicht vertraut, aber das könnte eine geeignete Wahl sein. Werfen Sie einen Blick auf Heroku Elements für andere Möglichkeiten. Viel Glück! –

Verwandte Themen