2013-11-05 2 views
5

Wie gesagt: https://docs.djangoproject.com/en/dev/howto/static-files/Warum ist der automatische statische Dateiserver von django nicht für die Produktion geeignet?

Wenn DEBUG auf True gesetzt ist, dient der Server automatisch die statische Datei, aber es heißt:

This method is grossly inefficient and probably insecure, so it is unsuitable for production. 

Aber was genau ist ineffizient und unsicher darüber? Ich habe nur ein kleines Projekt auf Heroku, das ich noch nicht auf "Produktion" eingestellt habe und ich frage mich, was genau die Nachteile sind.

Antwort

6

Kenneth (der Autor von requests, von Heroku verwendet) hat eine andere Meinung (source):

In Wirklichkeit dienen statische Dateien durch Python/Django ist in Ordnung für Produktion - diese Anforderungen sind nicht anders als dynamische.

Leistung wird fantastisch sein, aber nicht so gut wie Nginx.

Wenn Sie stark über die Effizienz besorgt sind, dann sollten Sie nicht Hosting diese Dateien auf Ihrem Server sowieso würden Sie sie auf ein CDN wie S3 + Cloudfront und dergleichen schieben.

Ein weiterer Vorteil dieses Ansatzes ist die Entwicklung: Produktionsparität.

Und auf Heroku, können Sie nicht Nginx Server statische Dateien verwenden, können Sie eigentlich nicht tun es auf den meisten anderen PaaS auch ich das gleiche Problem auf Cloud-Gießerei im vergangenen Jahr bekam. Aber es gibt eine Lösung:

Auf Heroku, Ihre Anwendung reagiert direkt Anfragen an HTTP, anstatt in einem zusätzlichen Webserver wie Apache oder Nginx.

Wir empfehlen die meisten Anwendungen dienen ihre Vermögenswerte Strait von Django oder ein CDN.

Django empfiehlt nicht, statische Dateien in der Produktion wegen das Design seiner statischen Dateihandler dienen.

Glücklicherweise gibt es eine Bibliothek namens DJ-Static, die einen produktionsbereiten WSGI-Asset-Server verwendet.

Ich habe einen Leitfaden für Django und statische Assets hier geschrieben: https://devcenter.heroku.com/articles/django-assets

Lesen Sie die folgenden Diskussionen um weitere Informationen:

Serving static files for a Django app

serving static files via gunicorn

7

leistungsbezogene Gründe:

  • Webserver sind um Größenordnungen besser bei der Bereitstellung statischer Dateien.
  • AFAIK der Entwicklungsserver ist mono-threaded und kann nur eine Anfrage gleichzeitig beantworten, gleichzeitige Anfragen werden blockiert (die meisten Browser machen 4 gleichzeitige Anfragen, die versuchen, Assets parallel herunterzuladen).

sicherheitsbezogene Gründe:

  • der App statische Inhalte dienen soll Overkill (Vereinfachung ist gut für die Sicherheit)
  • die Entwickler auf der sicheren Seite sein mögen, so ist es ein bisschen ein Haftungsausschluss
  • Debug-Modus stellt eine Vielzahl von Informationen über den Server

Django in der Zeitungsindustrie begann, wo im Allgemeinen gibt es genug Verkehr, um zu rechtfertigen, statischen Inhalt von einem dedizierten Webserver zu bedienen, wahrscheinlich haben die ursprünglichen Entwickler eine Voreingenommenheit für diese Anordnung.

Das heißt, es gibt Projekte, die den Standard-Entwicklungsserver durch eine robustere Implementierung basierend auf Gunicorn oder Tornado ersetzen.

Verwandte Themen