Python - Django: archivos estáticos de RunServer no encontrados

CorePress2024-01-25  12

He leído algunas publicaciones sobre temas similares pero ninguna es exactamente igual.

Tengo una aplicación Django (django 2.2.2, python 3.6.12) que funciona sin problemas cuando se sirve con uwsgi (junto con nginx), pero tiene problemas para encontrar archivos estáticos cuando se sirve con RunServer (Python Manage. py runserver 0:8000) con mensajes de error como el siguiente:

WARNING Not Found: /static/admin/css/base.css
WARNING Not Found: /static/stylesheets/css/style.css
WARNING Not Found: /static/admin/js/core.js

Estas ADVERTENCIAS son causadas por líneas en la página web a la que se accede como las siguientes.

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css">
<script type="text/javascript" src="/static/admin/js/core.js"></script>

Por supuesto, la página web no se muestra correctamente debido a que no se puede acceder a los archivos estáticos.

Tengo la siguiente configuración:

BASE_PATH = '/data/webapps/myapp'
STATIC_ROOT = os.path.join(BASE_PATH, '_site/static')

y en BASE_PATH, tengo carpetas como las siguientes que contienen todos los archivos que el sistema se quejó de que no se encontraron:

_site/static/admin/css
_site/static/admin/js
_site/static/stylesheets/css

Incluso dupliqué todas las carpetas debajor _site directamente bajo BASE_PATH como el siguiente, pero sin ningún efecto.

static/admin/css
static/admin/js
static/stylesheets/css

Aquí quiero enfatizar que funciona sin problemas cuando se sirve con uwsgi con el siguiente comando:

uwsgi --ini uwsgi.ini

y uwsgi.ini contiene las siguientes líneas:

[uwsgi]
chdir          = %d
enable-threads = true
max-requests   = 5000
file           = /data/webapps/myapp/myapp/conf/wsgi.py
socket         = uwsgi.sock
chmod          = 666
chmod-socket   = 666
uid            = myapp
gid            = myapp

y wsgi.py tiene los siguientes códigos:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mybic.conf.settings')
application = get_wsgi_application()

Se agradece cualquier ayuda.

P.D.

El comando findstatic tampoco puede encontrar esos archivos. Por ejemplo, el siguiente comando no encontró ninguna coincidencia.

python manage.py findstatic --verbosity=2 core.js

Agregar un vector STATICFILES_DIRS con todas las rutas de carpeta para los archivos estáticos, como el siguiente, solo ayudaría al comando findstatic pero no al comando runserver, es decir, todavía hay ADVERTENCIAS para acceder a la página web.

STATICFILES_DIRS = [
    os.path.join(BASE_PATH, '_site/static/stylesheets/css'),
    os.path.join(BASE_PATH, '_site/static/stylesheets/js'),
    os.path.join(BASE_PATH, '_site/static/admin/css'),
    os.path.join(BASE_PATH, '_site/static/admin/js'),
    ...
]

Agregue el código de plantilla donde remite estos archivos. Y salida del comando Collectstatic.

- Ivan Starostin

27/03/2021 a las 20:09

También infórmenos: ¿funcionan sus propios archivos estáticos? ¿Solo los archivos estáticos de administración están rotos o algún otro también?

- Ivan Starostin

27/03/2021 a las 20:12

@IvanStarostin Gracias por los comentarios. Todos los archivos bajo _site/static se recopilan mediante el comando Collectstatic más los archivos que creé manualmente. Y todos esos archivos en las ADVERTENCIAS están presentes tanto en BASE_PATH/_site/static/ como en BASE_PATH/static/. He revisado mi publicación.

-Envío

28/03/2021 a las 15:21

Supongo que algo sobrescribe STATIC_ROOT en alguna parte. o algunosproblemas con la carpeta de trabajo actual esperada/real.

- Ivan Starostin

28/03/2021 a las 16:08

1

@NguyễnVũThiên gracias. eso resolvió el problema.

-Envío

29/03/2021 a las 14:32



------------------------------------

Como señaló @NguyễnVũThiên, tiene algo que ver con el modo de depuración. Cuando la depuración está desactivada (ya sea configurando DEBUG en False o no configurando DEBUG en absoluto), ejecuta el servidor.ya no sirve archivos estáticos. Lamentablemente las ADVERTENCIAS son bastante engañosas. En lugar de decir No encontrado, deberían decir No servido (y decir algo sobre el modo de depuración).

Entonces, para resolver los problemas, como se sugiere en el enlace que proporcionó @NguyễnVũThiên, active el modo de depuración (DEBUG = True) o agregue la opción --insecure al servidor de ejecución (python Manage.py Runserver --insecure).

4

Cambiar debug = Verdadero es solo una prueba para detectar el problema. Necesita desactivar la depuración en producción. Así que ten cuidado.

– Nguyễn Vũ Thinên

29/03/2021 a las 22:45

Por el amor al esfuerzo que la gente pone en SO, sería agradecido aceptar & o vota la respuesta de @NguyễnVũThiên'n ya que te ayudó. ¡Salud!

-Laenka-Oss

5 de abril de 2021 a las 12:51

--inseguro era la opción que estaba buscando en el desarrollo. ¡Muchas gracias!

-OmerFI

20/01/2023 a las 12:01

@Laenka-Oss lamento no haber seguido esta tendencia después de publicar mi respuesta basada en la sugerencia de NguyễnVũThiên. Por supuesto que estoy de acuerdo contigo.

-Envío

22 de enero de 2023 a las 1:29



------------------------------------

Cambiar DEPURACIÓN = VERDADERO. Si funciona, simplemente siga esta publicación para resolver los problemas.

Mantener DEBUG = False, por muchas razones de seguridad.

Instalar pip install whitenoise (la versión actual es 5.2.0)

Yon tu configuración.py:

Agregue 'whitenoise.middleware.WhiteNoiseMiddleware' a MIDDLEWARE
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # Add WhiteNoise here
    ...
]
Agregue STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage' debajo de su STATIC_ROOT
if DEBUG:
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]
    ...

else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

En su carpeta que contiene Manage.py, ejecute python Manage.py Collectstatic (para el archivo estático del sitio de administración de Django)

0

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare