2010-10-28 6 views
5

Ich möchte eine Art the reverse of this.Wie erzeuge ich Dateien und zip/komprimiere dann mit Heroku?

Statt Entpacken und das Hinzufügen der Sammlung Dateien S3 Ich möchte

zu

tun Auf Anforderung des Benutzers:

  1. zip eine Reihe von XML-Dateien erzeugen die XML-Dateien mit einigen Bildern (bereits vorhandene Bilder auf s3 gehostet)
  2. download zip

Kennt jemand eine gute Art, dies zu tun? Ich denke, dass ich das auf einem normalen Rechner problemlos bewältigen kann, aber Heroku macht die Sache etwas komplizierter, da es ein schreibgeschütztes Dateisystem hat.

Antwort

4

Von der Heroku Dokumentation auf der read-only filesystem:

Es gibt zwei Verzeichnisse, die beschreibbar sind: ./tmp und ./log (unter Anwendung root). Wenn Sie eine Datei für die Dauer der Anfrage vorübergehend löschen möchten, können Sie in einen Dateinamen wie # {RAILS_ROOT}/tmp/myfile _ # {Process.pid} schreiben. Es gibt keine Garantie, dass diese Datei bei nachfolgenden Anforderungen vorhanden ist (obwohl dies möglich ist), daher sollte dies nicht für jede Art von Permanentspeicher verwendet werden.

Sie sollten Ihre generierten XML-Dateien können auf tmp/ und den Überblick über die Namen, download zu halten ziemlich leicht schreiben und die s3-Dateien in das gleiche Verzeichnis schreiben, und (vielleicht?) Aufrufen, so lange eine Zip-Befehl als Die Ausgabe erfolgt in tmp/, dann die Datei an den Browser mit dem richtigen Mime-Typ, um einen Download zu starten. Ich würde mich nur damit befassen, wie groß die Dateigröße ist, und ob Heroku ein undokumentiertes Limit dafür hat, was im tmp-Verzeichnis erlaubt ist. Vor allem, weil Sie diese Aktion nur für einen einmaligen Download in der Dauer einer einzelnen Anfrage durchführen, denke ich, dass Sie gute Chancen haben, dies zu tun.

Edit: Suchen Sie ein wenig herum, Sie könnte der Lage sein, so etwas wie RubyZip benutzen, um Ihre Zip-Datei zu erstellen, wenn Sie Systembefehle aufrufen vermeiden wollen.

+0

In Ordnung Brett, das klingt nach einem Gewinner. Zuallererst denke ich, dass wir nur die Zip für die Dauer der Anfrage brauchen würden. Wenn es noch länger benötigt wird, können wir es auf s3 schieben ... Ja, das hört sich machbar an. Prost! – digitalWestie

+0

rubyzip hat Probleme beim Erstellen von Zip-Dateien, die Windows-kompatibel sind. Rubyzip2 hat die gleichen Probleme und auch die Zip-Juwel. –