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....
78
alix 9 Okt. 2012 im 17:13

5 Antworten

Beste Antwort

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

147
rantanplan 9 Okt. 2012 im 13:45

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.

13
Ngure Nyaga 9 Okt. 2012 im 13:26

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.

7
WhyNotHugo 21 Sept. 2017 im 19:53

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

1
frost-nzcr4 17 Mai 2018 im 08:36

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.

23
Ciro Santilli 新疆改造中心法轮功六四事件 29 Jän. 2019 im 20:42