Lokal entwickeln, Bilder aus der Produktion verwenden

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Wenn Sie lokal an Ihrer Website arbeiten, bedeutet das, dass die Dateien, die Ihre Website antreiben, direkt auf Ihrem Computer liegen. Es ist üblich, dass diese Dateien in einem Versionskontrollsystem (Repository) gespeichert sind. Sie arbeiten daran und schieben sie ins Repository, wenn Sie fertig sind. Andere arbeiten auch, und Sie ziehen deren Änderungen zurück.

Was möglicherweise *nicht* in diesem Repository enthalten ist, sind Bilddateien aus dem CMS. WordPress ist ein klassisches Beispiel dafür. Wenn Sie in WordPress ein Bild hochladen, passiert eine ganze Menge. Es wird in den Ordner `uploads` hochgeladen, mehrere Versionen werden erstellt, sogar die Datenbank wird aktualisiert und Metadaten für Anhänge werden erstellt. Was *nicht* passiert, ist ein Commit im Versionskontrollsystem mit all diesen Dateien.

Es gibt Möglichkeiten, um sicherzustellen, dass Sie diese Dateien haben. Sie könnten ein Skript schreiben, um sie herunterzuladen. Sie könnten sie gelegentlich manuell per FTP übertragen. Im WordPress-Bereich gibt es Plugins, die helfen, wie WP DB Migrate Pro, das nicht nur die Datenbank verwaltet, sondern auch Bilder übertragen kann.

Aber vielleicht möchten Sie sich gar nicht mit Bildern beschäftigen. Vielleicht

  • Sie möchten die Bilder nicht in Ihrem Repository haben. Vielleicht ist das Repository nur ein Theme-Ordner, und es macht Sinn, es so zu belassen.
  • Sie haben etwa 10 GB an Bildern, und es ist unpraktisch und unnötig, sie hin und her zu verschieben.

Ich denke, das ist absolut legitim. Eine Publikations-Website muss wahrscheinlich nicht jedes einzelne Bild, das sie jemals hochgeladen hat, als Teil ihres Haupt-Repositorys haben.

Okay, genug Erklärung. Sie verstehen es.

Sean Lange sprach 2013 in seinem Artikel Using Remote Image Files When You Develop Locally über genau dieses Thema. Seine Lösung war, lokale URLs auf Webserver-Ebene neu zu schreiben, um auf die Produktionsdateien zu verweisen.

Ich habe meine Antwort in Apache URL-Rewrite-Regeln gefunden. Wenn das Apache-Programm eingehende Webseitenanfragen bearbeitet, erlauben Rewrite-Regeln ihm, URLs zu ändern, die bestimmten Mustern entsprechen – zum Beispiel können sie Anfragen für das ‚files‘-Verzeichnis auf Ihrem lokalen Rechner in Anfragen für entfernte URLs auf dem Produktionsserver umwandeln.

Hier sind seine Apache-Rewrite-Regeln

RewriteEngine on
# Force image styles that have local files that exist to be generated.
RewriteCond %{REQUEST_URI} ^/sites/([^\/]*)/files/styles/[^\/]*/public/((.*))$
RewriteCond %{DOCUMENT_ROOT}/sites/%1/files/%2 -f
RewriteRule ^(.*)$ $1 [QSA,L]
# Otherwise, send anything else that's in the files directory to the production server.
RewriteCond %{REQUEST_URI} ^/sites/[^\/]*/files/.*$
RewriteCond %{REQUEST_URI} !^/sites/[^\/]*/files/css/.*$
RewriteCond %{REQUEST_URI} !^/sites/[^\/]*/files/js/.*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example.com/$1 [QSA,L]

Er arbeitet mit Drupal über MAMP, aber solange Sie lokal Apache verwenden, ist alles nur eine Variation derselben Idee. Passen Sie URLs an, die auf die Zielassets zeigen, und schreiben Sie sie auf die Live-Seite um.

Er konnte diese Regeln in ein kleines Feld in MAMP einfügen, das dies handhabt. Ich betreibe WordPress lokal über ein kleines Docker-Setup, daher habe ich meine `.htaccess`-Datei direkt bearbeitet und sie für meine Bedürfnisse vereinfacht.

RewriteCond %{REQUEST_URI} ^/wp-content/uploads/[^\/]*/.*$
RewriteRule ^(.*)$ https://css-tricks.de/$1 [QSA,L]

Funktioniert für mich super! Hier ist eine visuelle Erklärung