error - Django en Heroku-Archivos estáticos de administrador rotos
whitenoise django 2 (9)
''django.contrib.staticfiles.views.serve''
en lugar de
''django.views.static.serve''
Tengo una aplicación Django ejecutándose en Heroku / Cedar, configurada según las instrucciones en https://devcenter.heroku.com/articles/django
El uso de Gunicorn según las instrucciones de Heroku no incluye los archivos estáticos necesarios para que funcione el administrador de Django. Puedo cambiar el archivo Procfile a "manage.py run_gunicorn" para el desarrollo local, pero eso no funciona en Heroku.
He buscado por todas partes una solución: ¿hay alguna manera de incluir los archivos estáticos de administración sin lanzarlos en S3 con mis otros archivos estáticos?
Echa un vistazo a esta publicación: http://matthewphiong.com/managing-django-static-files-on-heroku
Si eso no funciona, intente agregar lo siguiente a urls.py después de la tupla de patrón de url normal. Asegúrese de tener su conjunto STATIC_ROOT y de que haya ejecutado la recopilación estática en su entorno local todo antes de presionar Heroku.
urlpatterns += patterns('''',
url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {
''document_root'': settings.STATIC_ROOT,
}),
)
Parece poco tarde en comparación con la fecha solicitada. Pero me metí en este problema y dediqué 30 minutos a hacer lo que hice mal. Así que aquí está la solución mágica para aquellos que podrían caer en esta trampa.
Hay algún problema con django.contrib.staticfiles.urls
de Heroku
SOLUCIÓN
dj-static
instalar dj-static
( Enlace para descargar ) en su configuración de Heroku. Es una utilidad de middleware de Django que permite servir adecuadamente los activos estáticos desde la producción con un servidor WSGI como Gunicorn.
Espero que esto ayude a alguien.
Si está implementando en Heroku sin usar whitenoise (lo que sugeriría), ¡definitivamente use dj_static https://pypi.python.org/pypi/dj-static !
Pasé las últimas 3 horas tratando de entregar mis archivos a heroku y dj_static funcionó en solo 2 minutos.
Si usa runserver y configura su aplicación con DEBUG = True, entonces servirá los archivos de administración como en su máquina de desarrollo. Sin embargo, esta definitivamente no es la forma recomendada de hacerlo, y sugeriría que los ponga en S3.
Con la aplicación django-storages es muy fácil configurar collectstatic para enviar automáticamente todos los archivos de administración a S3. Puedes encontrar direcciones here
Sigue esto para solucionar todos los problemas relacionados con la estática con Django y heroku.
En tu settings.py
pega esto al final.
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATICFILES_DIRS = (
os.path.join(BASE_DIR,''static''),
)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR,''templates''),
)
STATIC_URL = ''/static/''
Su plantilla para una aplicación en particular debe estar en app_name/templates/app_name/
Cuando renderice la plantilla, así es como especificará el template name
en views.py
.....
return render(request,''app_name/template_name.html'',context)
Para static files
coloque sus archivos aquí:
project_folder/app_name/static/app_name/css
project_folder/app_name/static/app_name/js
project_folder/app_name/static/app_name/img
para acceder a la ruta de uso del archivo estático app_name/css/style_name.css
Si sigue esto, todos sus archivos estáticos se cargarán bien tanto en Heroku como en su máquina de desarrollo local.
Tengo administrador django trabajando con las siguientes ediciones
urls.py (al final)
import settings
urlpatterns += patterns('''',
url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {
''document_root'': settings.STATIC_ROOT,
}),
)
Procfile
web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT
cree una carpeta ''estática'' en su ''directorio_proyecto''.
establezca la ruta ''STATIC_ROOT'' en el archivo ''settings.py'' que puede servir los archivos estáticos de su sitio de administración.
STATIC_ROOT = (os.path.join(os.path.dirname(__file__), ''..'', ''static''))
Añadir STATIC_ROOT en ''/urls.py''
from django.conf import settings
urlpatterns += patterns('''',
url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {
''document_root'': settings.STATIC_ROOT,
}),
)
Ejecute el siguiente comando que copiará todos los archivos estáticos de administración en la carpeta estática del proyecto.
python manage.py collectstatic
Ahora haz git add, commit y push heroku master.
solo agrega estos en su lugar
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
utilizando django 1.4.1