Stage File Proxy - weg mit großen Datei-Dumps

Wer kennt das nicht: man versucht gemütlich Urlaub zu machen, vielleicht auf dem Bauernhof, schön die Seele baumeln lassen, die Sonne scheint auf den Kopf, die Kuhglocken schallen durch die Heide, alles fühlt sich wunderbar an.
Und dann ... dann kommt der Anruf vom Kollegen: "Johannes, kannst Du Dir mal bitte 'ne Sache ansehen auf Seite XY und das mal eben kurz beheben. Wir brauchen das bis morgen!". Unabhängig von der Frage ob das im Urlaub so gesund ist, stürze ich mich natürlich sofort auf das Problem, ich hab ja sicherheitshalber meinen Rechner mitgenommen...

Mal "schnell" eine lokale Entwicklungsumgebung samt Inhalt einrichten

Mit Hilfe von Git lässt sich für das Projekt auch schnell der Code aufsetzen. Da in vielen Fällen das Problem oder die Aufgabe nur mit Inhalt zu testen ist, will ich mir den Inhalt natürlich auch schnell mal testweise runterziehen, dazu eignet sich ein Backup-Migrate-Dump (die Konfiguration ist natürlich in Features gepackt ;) ). Der Datenbank-Dump ist damit schnell gezogen, sind ja maximal ein paar Megabyte. Somit haben wir ja eigentlich schon den kompletten textlichen Inhalt parat.

Da auf der Seite aber nun auch viele Bilder in den Content eingebunden sind, in vielen Views Vorschaubilder angezeigt werden, sollten die nun auch irgendwie in meine lokale Installation. Der alte Weg ist da meist das komplette sites/default/files-Verzeichnis vom Server zu ziehen (z. B. per FTP). Bei manchen Projekten kommen da aber dann auch schon gern ein paar Gigabyte zusammen, das kann also lange dauern, und meist dann wenn mans dann doch eigentlich nur mal zwischendurch abhandeln will.

Stage File Proxy - mal eben, wirklich!

Nun ist es so, dass man zum Arbeiten/Testen meist nur ein paar Bilder benötigt, die eben gerade in dem Inhalt eingebunden sind, den man sich testweise lokal anzeigt. Da ist es eigentlich überflüssig alle Dateien extra in die lokale Kopie herunterzuladen. An dieser Idee setzt das Modul Stage File Proxy an.

Das Modul nimmt einem die Arbeit ab, die einzelnen Dateien auf die lokale Installation zu ziehen. Bei jeder Anfrage wird auf der lokalen Installation geprüft, ob die Datei schon im Dateienverzeichnis vorhanden ist. Wenn nicht wird auf dem Server (z. B. der Live-Installation) nachgesehen, ob die Datei dort vorhanden ist, und falls ja, einfach ins lokale Dateienverzeichnis heruntergeladen. Das Modul muss hierzu nur auf der lokalen Installation, jedoch nicht auf der Quell-Seite installiert sein.

Einzurichten ist dies ganz einfach:

  1. Das Modul wie jedes andere herunterladen und in die Drupal Module packen (drush dl stage_file_proxy)
  2. das Modul aktivieren (drush en stage_file_proxy)
  3. und in der settings.php die Remote-URL eintragen: $conf['stage_file_proxy_origin'] = 'http://example.com';

Die Prozedur wird in der INSTALL.txt des Moduls natürlich auch erklärt.

Danach läuft es einfach (vorausgesetzt bei der Drupal-Installation wurden die Dateirechte im lokalen Dateiverzeichnis richtig gesetzt). 

Stage File Proxy achtet nebenbei auch auf die Imagecache styles. Denn anstatt das einzelne schon durch Imagecache prozessierte Bild herunterzuladen, zieht sich Stage File Proxy die Originaldatei. Die Cache-Styles können so lokal für jede Größe erzeugt, ohne nochmals eine Variante runterladen zu müssen. Dieses Verhalten kann man in der settings.php durch die Angabe von $conf["stage_file_proxy_use_imagecache_root"] = FALSE; aber auch ausschalten.

Mit einer weiteren Option ($conf['stage_file_proxy_hotlink'] = TRUE;) kann man des Herunterladen der Dateien gänzlich vermeiden. Stattdessen erfolgt ein Redirect 301 auf die Datei am Server.

Falls die Quell-Installation sich hinter einem Zugriffsschutz (durch .htaccess/.htpasswd) befindet, lässt sich das einfach mit dem entsprechenden Domain-Prefix lösen: $conf['stage_file_proxy_origin'] = 'http://benutzer:passwort@ example.com';.

Fazit

Zugegeben, im Urlaub tritt dieses Szenario nicht so wirklich häufig auf, aber dafür um so häufiger im Entwickleralltag. Da es mittlerweile auch eine Version für Drupal 7 gibt, benutze ich das Modul auch schon bei fast jeder lokalen Seite. Gerade für das Aufsetzen von lokalen Installationen im Team geht das ganz wunderbar. Anstatt einen großen Datendump austauschen zu müssen oder jeder sich per FTP die Daten selbst zieht, erledigt das Stage File Proxy alles wunderbar und schnell. Aber auch auf der Stage vor dem Go Live, nimmt das Modul den lästigen Kopiervorgang der aktuellen Dateien ab.
Bisher ist mir nur ein Fall untergekommen, wo das mit den Dateien nicht so einfach war: bei einer Seite mit vielen eingebunden Videos, hier waren die Dateien schlichtweg zu groß, um sie mal eben per PHP runterzuladen. Aber vielleicht kommt ja jemand aus der Zuhörerschaft auf eine findige Idee um dieses "Problem" zukünftig zu lösen.

Das Modul findet sich natürlich auf drupal.org: http://drupal.org/project/stage_file_proxy und ist für Drupal 6 und Drupal 7 als Entwicklungsversion verfügbar. Vielen Dank an netaustin und robw für die Releases!

Kommentare

Hey, da habt ihr mein Blogbeitrag gerade überflüssig gemacht: http://www.werisworld.ch/blog/neue-dateien-aus-verzeichnissen-gzippen! ;-)

Gruss
Weri

Thomas Moseler user image
tommi

Wunderbare Sache das. Einfacher gehts nicht. Ein Hoch auf Johannes :)
Für Windows 7 scheint mir noch folgendes notwendig zu sein, falls keine Dateien gesynct werden:
Die Zugriffsrechte für den files Ordner müssen evtl. gesetzt werden. Ich habe es ganz brutal gemacht, und Schreibrechte für die Rolle "Jeder" gegeben. Das geht bestimmt auch etwas sanfter (sicherer).

Wenn man eine Seite mit vielen Imagecache-Bildern aufruft, scheint es mir, als ob man diese zweimal aufrufen müsse: beim ersten Laden lädt sich das Modul die Originaldatei. Dann muß man nochmal neu laden und die Imagecache Derivate werden erzeugt.

Neuen Kommentar schreiben