Archivos estáticos en OpenShift Django

Tengo problemas al entregar archivos estáticos, es decir, hojas de estilo e imágenes requeridas de mis páginas html. Parece que no puedo entender por qué no se encuentran estas imágenes estáticas. Esto es lo que tengo en mi settings.py

  STATIC_URL = PROJECT_PATH + '/static/' # Additional locations of static files STATICFILES_DIRS = (PROJECT_PATH + "/static/",) STATIC_ROOT = "/static/" # List of finder classes that know how to find static files in # various locations. STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) 

Recibo un error 404, cuando me dirijo al registro. Pero no puedo averiguar dónde o depurar o averiguar dónde está buscando OpenShift estas imágenes. He intentado usar STATIC_URL = '/static/' pero eso tampoco funciona.

1) Has mezclado las variables STATIC_URL y STATIC_ROOT.

STATIC_ROOT: necesita apuntar al directorio donde desea que se recopilen sus archivos estáticos. En este caso, parece que es PROJECT_PATH + ‘/ static /’. Asegúrese de que este directorio es correcto.

STATIC_URL: La url a la que se accede a tus archivos estáticos. / static / es correcto.

Eliminar la variable STATICFILES_DIRS. No puede ser lo mismo que STATIC_ROOT porque primero le dice a Django dónde encontrar los archivos estáticos y segundo le dice a Django dónde almacenar los archivos estáticos cuando se recolectan.

2) Si está trabajando con Openshift, como señala @ timo.rieber, necesitará un action_hook para que el despliegue le indique que recopile sus archivos estáticos.

3) Su carpeta static_root no puede estar en ninguna parte de su proyecto porque el servidor web Openshift no lo encontrará. Debe estar bajo su proyecto / wsgi / static <--- (Por lo tanto, este será el valor de la variable STATIC_ROOT).

Como ya te respondí en otra pregunta, comenzar un nuevo proyecto desde cero para Openshift es doloroso. He escrito una publicación sobre la creación de un nuevo proyecto para que funcione con Openshift y también puede visitar el compromiso al que se hace referencia allí, que lo redireccionará a un proyecto básico de Openshift que funcione. También puede descargar el proyecto básico del repository de Openshift, pero sigue una estructura de proyecto antigua (pero sigue funcionando). Ahora puede usar una estructura de proyecto más simple para aplicaciones de Python

Oye, acabo de tener el mismo problema y encontré una manera de hacerlo funcionar.

Solo ve a tu configuración.py y haz algunos cambios


reemplazar

 DJ_PROJECT_DIR = os.path.dirname(__file__) BASE_DIR = os.path.dirname(DJ_PROJECT_DIR) 

CON

 BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

Al final del archivo settings.py agregue esto

 STATIC_URL = '/static/' TEMPLATE_DIRS = [ os.path.join(BASE_DIR, 'templates'), ] STATIC_ROOT = os.path.join(BASE_DIR, '../static') STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static', 'dirs'), ) 

y en su archivo html simplemente no se olvide de cargar archivos estáticos así

   {% load staticfiles %}    It works!   

Ahora tus directorios deberían verse así.

 --wsgi --myproject --templates -- drop html files here ... --static --dirs --img -- drop images here .. --js -- drop js here .. --css -- drop css files here .. 

Después de cada implementación en producción ( git push en su repository Openshift), necesita recostackr todos los archivos estáticos en un solo lugar, su STATIC_ROOT . Este es un trabajo para el comando de gestión de django collectstatic , consulte la documentación de Django aquí .

Para los entornos de Openshift, una buena práctica para automatizar esto después de enviarlo hacia arriba es el gancho de deploy documentado en los documentos de Openshift .

Cuando presionas …

Construir sin Jenkins usa su espacio de aplicación como parte del proceso de comstackción y prueba. Debido a esto, la aplicación se cierra para que su memoria se pueda utilizar para la construcción. Los siguientes pasos tienen lugar:

  1. Ejecuta un ‘git push’ en su computadora: sus cambios se envían a su aplicación OpenShift
  2. La aplicación se apaga.
  3. Sus cambios se copian en el servidor en la ubicación correcta
  4. OpenShift invoca sus enlaces de comstackción: los archivos de script que ha colocado en su repository Git
  5. Se inicia tu aplicación

El script de deploy puede verse así:

 #!/bin/bash source $VIRTUAL_ENV/bin/activate # Executing collectstatic (organize static files) python "$OPENSHIFT_REPO_DIR"wsgi/yourproject/manage.py collectstatic --noinput 

Para más detalles, también puede leer Django no puede encontrar archivos estáticos. Necesito un segundo par de ojos, me estoy volviendo loco .

Pasé mucho tiempo intentando que los archivos estáticos funcionaran en Openshift. Siguiendo esta publicación del blog , configuré mi proyecto Django utilizando el diseño estándar del proyecto, pero los archivos estáticos no funcionaban. Creo que la configuración de vhost que utilizan no está configurada para buscar archivos en / static /. Esta pregunta de Servir archivos estáticos Django en OpenShift parece sugerir que si usa el diseño anterior y usa wsgi / static, funcionará. Al final, instalé django-storages y serví mis archivos estáticos desde s3.

Yo también tuve el mismo problema con Heroku. Los archivos estáticos no se sirven correctamente.

Luego me di cuenta cada vez que implementaba la aplicación en el fondo de Heroku para realizar una recostackción estática. Pero no mencioné STATIC_ROOT en settings.py.

Así que puse una raíz estática como esta

 STATIC_ROOT = 'staticfiles' 

Entonces desplegué ese tiempo su trabajo. Pruébalo en el turno abierto y házmelo saber.