35 votes

Heroku - Gestion des fichiers statiques dans l'application Django

J'ai un projet (myapp) dans heroku, mais je ne peux pas obtenir les fichiers statiques pour fonctionner correctement. Je suivais ce blog.

Mon Procfile ressemble à ceci:

web: python myapp/manage.py collectstatic --noinput; bin/gunicorn_django --workers=4 --bind=0.0.0.0:$PORT myapp/settings.py

settings.py:

...

STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

STATICFILES_DIRS = (
    # I have the static folder inside my app and not inside the project
    os.path.join(PROJECT_PATH, 'cesar/static'),
)

...

Lors du redémarrage de l'aide d' heroku restart c'est ce que l' heroku logs montre:

...
Copying ...

114 static files copied to '/app/myapp/staticfiles'.
...

Mais quand je le fais, heroku run ls -l myapp/ je ne vois pas l' staticfiles le dossier:

-rw------- 1 u5605 5605    0 Jan 28 16:53 __init__.py
drwx------ 4 u5605 5605 4096 Jan 28 16:53 cesar
-rw------- 1 u5605 5605  503 Jan 28 16:53 manage.py
-rw------- 1 u5605 5605 6292 Jan 28 16:53 settings.py
drwx------ 2 u5605 5605 4096 Jan 28 16:53 templates
-rw------- 1 u5605 5605  257 Jan 28 16:53 urls.py
-rw------- 1 u5605 5605  286 Jan 28 16:53 views.py

Ce qui me manque ou faire du tort?

38voto

César Bustíos Points 4505

J'ai trouvé une solution. C’était ma première myapp/urls.py :

 from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
from django.conf import settings


admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', include('myapp.cesar.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
 

J'ai ajouté ces lignes à la fin du fichier d'origine myapp/urls.py :

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

Maintenant ça fonctionne bien. J'espère que cela aide aussi quelqu'un d'autre

0voto

machaku Points 680

Vous devriez probablement créer manuellement un dossier STATIC_ROOT vide spécifié dans vos paramètres avant d'exécuter './manage.py collectstatic'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X