with postgres ocean digitalocean deploy aws and django gunicorn

postgres - django with nginx and gunicorn



¿Cómo hacer que Django sirva archivos estáticos con Gunicorn? (5)

Cuando esté en modo de desarrollo y cuando esté utilizando algún otro servidor para el desarrollo local, agregue esto a su url.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns # ... the rest of your URLconf goes here ... urlpatterns += staticfiles_urlpatterns()

Más información here

Cuando estás en producción nunca, nunca pones un gunicornio al frente. En su lugar, utiliza un servidor como nginx que envía solicitudes a un grupo de trabajadores de gunicornio y también sirve los archivos estáticos.

Mira here

Quiero ejecutar mi proyecto django bajo gunicornio en localhost. Instalé e integré el gunicornio. Cuando corro:

python manage.py run_gunicorn

Funciona pero no hay ningún archivo estático (css y js)

Inhabilité debug y template_debug en settings.py (los hice falsos), pero sigue siendo el mismo. ¿Me estoy perdiendo de algo?

Llamo a la estática como:

{{ STATIC_URL }}css/etc....



El gunicornio debería usarse para servir a la "aplicación" python, mientras que los archivos estáticos son servidos por un servidor de archivos estático (como Nginx).

Aquí hay una buena guía: http://honza.ca/2011/05/deploying-django-with-nginx-and-gunicorn

Este es un extracto de una de mis configuraciones:

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; } } }

Algunas notas:

  • La raíz estática, la raíz de medios, el prefijo de ruta de archivos estáticos y el prefijo de ruta de archivos multimedia están configurados en settings.py
  • Una vez que tiene nginx configurado para servir desde el directorio de contenido estático, debe ejecutar "python manage.py collectstatic" en la raíz del proyecto para que los archivos estáticos en las diversas aplicaciones puedan copiarse a la carpeta estática

Para finalizar: si bien es posible servir archivos estáticos de gunicorn (habilitando una vista de publicación de archivos estáticos de solo depuración), eso se considera una mala práctica en la producción.


Lo he usado para mi entorno de desarrollo (que usa gunicornio):

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()

Y luego ejecuta gunicorn myapp.wsgi . Esto funciona de manera similar a la respuesta de @rantanplan , sin embargo, no ejecuta ningún middleware cuando se ejecutan archivos estáticos.


Ruido blanco

Heroku recomienda este método en: https://devcenter.heroku.com/articles/django-assets :

Su aplicación ahora servirá activos estáticos directamente de Gunicorn en producción. Esto será perfectamente adecuado para la mayoría de las aplicaciones, pero es posible que las aplicaciones de nivel superior quieran explorar usando un CDN con Django-Storages.

Instalar con:

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)

Probado en Django 1.9.