2012-07-17 22 views
5

Estoy ejecutando Django en Heroku. Puedo ejecutar Collectstatic con éxito, pero cuando voy al sitio es obvio que Django no puede encontrar mis archivos estáticos. He aquí un fragmento de mi configuración - Creo que es sobre todo cosas estándar:Django en Heroku - archivos estáticos no se encuentran

STATIC_ROOT = '' 

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 
STATIC_URL = '/static/' 

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__)) 


# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    os.path.join(PROJECT_DIR, 'static'), 
) 

# List of finder classes that know how to find static files in 
# various locations. 
if CLAYS_ENV == 'dev': 
    STATICFILES_FINDERS = (
     'django.contrib.staticfiles.finders.FileSystemFinder', 
     'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
     'django.contrib.staticfiles.finders.DefaultStorageFinder', 
    ) 

Y en mi caso la variable CLAYS_ENV se establecerá en 'dev'. ¿Alguna idea sobre por qué Django puede ejecutar coleccionistas de manera exitosa, pero luego no puede encontrar los archivos después?

Respuesta

3

Se recomienda enviar archivos estáticos a través de un CDN (como Amazon S3) cuando se usa Heroku. Si bien puede seguir atendiendo a aquellos directamente desde Heroku, el mismo proceso que atiende solicitudes dinámicas también está sirviendo datos estáticos, desperdiciando tiempo de procesamiento. Además, en el caso de los archivos multimedia, el uso de CDN es obligatorio, ya que el sistema de archivos de Heroku es "efímero": cada vez que implementa un nuevo código, se recrea una nueva imagen de la pila Cedar desde cero y se visualiza un nuevo código hecho. Todos los archivos que no se hayan rastreado con Git creados entre despliegues se pierden.

+0

Tomado del artículo en sí: Esto será perfectamente adecuado para la mayoría de las aplicaciones, pero las aplicaciones de nivel superior pueden querer explorar usando un CDN con Django-Storages. –

4

Recopilar estática y servir medios estáticos son dos cosas diferentes. Collectstatic simplemente pone sus medios estáticos en su STATIC_DIRS

Servir sus archivos estáticos es un proceso del servidor no el collectstatic comando. Nunca he implementado para heroku antes, pero ¿tiene una url para asignar sus activos estáticos a su ubicación?

if not settings.DEBUG: 
    urlpatterns += patterns('', 
     (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), 
    ) 

¿Qué servidor estás utilizando? Sin embargo, normalmente quiere que el servidor sirva medios estáticos en lugar de django. En apache, esto se hace configurando un Alias

+1

En las versiones más nuevas de Django, es probable que necesites modificar lo anterior ligeramente añadiendo 'url' al frente del patrón de la url, p. 'url (r '^ static ...' –

+0

Este enfoque no se debe usar en un entorno de producción. En su lugar, debe entregar los archivos directamente a través de wsgi. Puede seguir estas instrucciones para servir de esta manera: https: // devcenter .heroku.com/articles/django-assets – Josh

Cuestiones relacionadas