Ich möchte mein Django-Projekt unter Gunicorn auf localhost ausführen. Ich habe Gunicorn installiert und integriert. Wenn ich renne:
python manage.py run_gunicorn
Es funktioniert, aber es gibt keine statischen Dateien (CSS und JS)
Ich habe debug und template_debug in settings.py deaktiviert (sie wurden falsch gemacht), aber es ist immer noch dasselbe. Vermisse ich etwas
Ich nenne Statik wie:
{{ STATIC_URL }}css/etc....
5 Antworten
Wenn Sie sich im Entwicklungsmodus befinden und einen anderen Server für die lokale Entwicklung verwenden , fügen Sie diesen Ihrer url.py hinzu
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf goes here ...
urlpatterns += staticfiles_urlpatterns()
Weitere Informationen hier
Wenn Sie in der Produktion sind, haben Sie niemals ein Gunicorn in den Vordergrund gestellt. Stattdessen verwenden Sie Ein Server wie Nginx, der Anfragen an einen Pool von Gunicorn-Mitarbeitern sendet und auch die statischen Dateien bereitstellt.
Siehe hier
Das Gunicorn sollte verwendet werden, um die Python- "Anwendung" selbst zu bedienen, während die statischen Dateien von einem statischen Dateiserver (wie Nginx) bereitgestellt werden.
Hier finden Sie eine gute Anleitung: http://honza.ca/ 2011/05 / Einsatz von Django mit Nginx und Gunicorn
Dies ist ein Auszug aus einer meiner Konfigurationen:
upstream app_server_djangoapp {
server localhost:8000 fail_timeout=0;
}
server {
listen < server port goes here >;
server_name < server name goes here >;
access_log /var/log/nginx/guni-access.log;
error_log /var/log/nginx/guni-error.log info;
keepalive_timeout 5;
root < application root directory goes here >;
location /static {
autoindex on;
alias < static folder directory goes here >;
}
location /media {
autoindex on;
alias < user uploaded media file directory goes here >;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://app_server_djangoapp;
break;
}
}
}
Einige Notizen:
- Das statische Stammverzeichnis, das Medienstammverzeichnis, das Pfadpräfix für statische Dateien und das Pfadpräfix für Mediendateien werden in Ihrer settings.py eingerichtet
- Nachdem Sie nginx für die Bereitstellung aus dem statischen Inhaltsverzeichnis eingerichtet haben, müssen Sie "python manage.py collectstatic" in Ihrem Projektstamm ausführen, damit die statischen Dateien in den verschiedenen Apps in den statischen Ordner kopiert werden können
Abschließend: Während es möglich ist, statische Dateien von Gunicorn bereitzustellen (indem eine Nur-Debug-Ansicht für statische Dateien bereitgestellt wird), wird dies in der Produktion als schlechte Praxis angesehen.
Ich habe dies für meine Entwicklungsumgebung verwendet (die Gunicorn verwendet):
from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application
if settings.DEBUG:
application = StaticFilesHandler(get_wsgi_application())
else:
application = get_wsgi_application()
Führen Sie dann gunicorn myapp.wsgi
aus. Dies funktioniert ähnlich wie @ rantanplans Antwort, führt jedoch keine Middleware aus, wenn statisch ausgeführt wird Dateien.
Seit Django 1.3 gibt es django / conf / urls / static.py, die statische Dateien im DEBUG-Modus verarbeiten:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Lesen Sie mehr https: // docs .djangoproject.com / de / 2.0 / howto / static-files / # Serving-statische-Dateien-während der Entwicklung
Weißfärbung
Post v4.0
http://whitenoise.evans.io/en/stable/changelog.html#v4-0
Die WSGI-Integrationsoption für Django (bei der wsgi.py bearbeitet wurde) wurde entfernt. Stattdessen sollten Sie WhiteNoise zu Ihrer Middleware-Liste in settings.py hinzufügen und alle Verweise auf WhiteNoise aus wsgi.py entfernen. Weitere Informationen finden Sie in der Dokumentation. (Die reine WSGI-Integration ist weiterhin für Nicht-Django-Apps verfügbar.)
Vor v4.0
Heroku empfiehlt diese Methode unter: https://devcenter.heroku.com/articles/django-assets:
Ihre Anwendung wird jetzt statische Assets direkt von Gunicorn in der Produktion bereitstellen. Dies ist für die meisten Anwendungen vollkommen ausreichend, aber Top-Tier-Anwendungen möchten möglicherweise die Verwendung eines CDN mit Django-Storages untersuchen.
Installieren mit:
pip install whitenoise
pip freeze > requirements.txt
wsgi.py
:
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "free_books.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
Getestet auf Django 1.9.
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.