Liefert statische Dateien von einem CDN und nicht von Flask in der Produktion

8

In meiner Flask-App serviere ich die statischen Assets über die App in der Dev-Umgebung, aber ich möchte ein CDN in der Produktion verwenden. Jedes Asset wird in eine Vorlage namens base.hmtl geladen, daher denke ich, dass die einfachste Lösung darin besteht, eine Variable an die Renderfunktion zu übergeben und sie in der Vorlage zu verwenden:

%Vor%

Normalerweise wäre es eine leere Zeichenfolge im dev-env und die cdn-URL in der Produktion. Ich möchte vermeiden, diese STATIC_URL Variable an jede Ansicht zu übergeben. Ich könnte es mit

arbeiten lassen %Vor%

Aber für mich scheint das ein bisschen hacky. Gibt es einen besseren Weg, um dieses Problem zu lösen?

    
fodma1 06.03.2016, 07:45
quelle

2 Antworten

12

Sie müssen nicht ändern, wie Sie mit statischen Dateien verknüpfen, Sie können weiterhin url_for('static', filename='myfile.txt') verwenden. Ersetzen Sie die statische Standardansicht durch eine, die zum CDN umleitet, falls sie konfiguriert ist.

%Vor%

Unabhängig davon, ob Sie sich auf einem Dev-Computer oder in einer Produktion befinden, legen Sie den STATIC_URL config-Wert auf den CDN fest, und Anforderungen für statische Dateien werden dorthin umgeleitet.

Redirects sind relativ billig und werden von Browsern erinnert. Wenn Sie an den Punkt kommen, an dem die Leistung von ihnen signifikant beeinflusst wird, können Sie eine Funktion schreiben, die direkt mit dem CDN verknüpft ist.

%Vor%

Der template_global Decorator stellt die Funktion in allen Vorlagen zur Verfügung. Verwenden Sie es anstelle von url_for , wenn Sie URLs für statische Dateien benötigen.

    
davidism 06.03.2016, 08:05
quelle
2

Dieser flask cdn Integrationsleitfaden kann es wert sein, sich durchlesen zu lassen. Grundsätzlich können Sie die Flask-CDN-Erweiterung installieren und Ihre CDN-URL in Ihrer app.py-Datei wie folgt definieren:

%Vor%     
CodyA 07.03.2016 14:02
quelle

Tags und Links