31 votes

Manière appropriée de manipuler des fichiers statiques et des modèles pour Django sur Heroku

Je passe mon application django à Heroku, et je me demandais quelle était la bonne façon de gérer les fichiers statiques. Dois-je simplement les pousser via git vers Heroku? Ou devrais-je les stocker sur SW3 ou quelque chose? En outre, que devraient être STATIC_ROOT et autres?

Merci!

53voto

Intenex Points 1071

Vous devez les stocker à l'extérieur d'un service comme S3 - alors que Heroku peut servir les fichiers statiques, il n'est pas conçu pour.

Voici une bonne amorce pour débuter avec S3:

https://devcenter.heroku.com/articles/s3

L'utilisation de django-entrepôts http://django-storages.readthedocs.org/en/latest/index.html pour collecter les fichiers statiques de votre S3 seau et de les servir.

Ce sont les paramètres nécessaires vous aurez besoin d'avoir pour S3:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_ACCESS_KEY_ID = 'access-id'
AWS_SECRET_ACCESS_KEY = 'secret-key'
AWS_STORAGE_BUCKET_NAME = 'bucket-name'
AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files

MEDIA_ROOT et STATIC_ROOT sont remplacés par DEFAULT_FILE_STORAGE et STATICFILES_STORAGE respectivement et n'est donc pas nécessaire. Vous, cependant, veulent définir MEDIA_URL et STATIC_URL à quelque chose comme

STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'
ADMIN_MEDIA_PREFIX = 'https://bucket-name.s3.amazonaws.com/static/admin/'

Si vous souhaitez stocker vos statique et les fichiers multimédia dans différents sous-dossiers, c'est une excellente solution: http://stackoverflow.com/a/10825691/674794

Vous devrez définir MEDIA_URL et STATIC_URL respectifs de nouveaux dossiers, par exemple

MEDIA_URL = 'https://bucket-name.s3.amazonaws.com/media/'
STATIC_URL = 'https://bucket-name.s3.amazonaws.com/static/'

Vous voudrez aussi vous exécutez manuellement manage.py collectstatic et désactiver Heroku automatique collectstatic comme par https://devcenter.heroku.com/articles/django-assets#disabling_collectstaticcomme Heroku est collectstatic sera reupload tous les fichiers statiques de S3 à chaque fois que vous poussez même si les fichiers n'ont pas été modifiés, l'ajout d'un gros transfert et à la demande de la charge de S3 et de ralentir votre pousse.

Ensuite, continuez simplement à l'aide de {{ STATIC_URL }} dans vos modèles, comme d'habitude, et vous devriez être en jeu!

<link href='{{ STATIC_URL }}css/styles.css' type='text/css' rel='stylesheet'>

Si vous souhaitez commencer simple et choisir de ne pas prendre immédiatement cette route, vous pouvez faire de rapide hack dans votre url de configuration en suivant Cesar est mentionné dans le post au Heroku - Manipulation des fichiers statiques dans Django app, mais il y a une diminution significative dans les performances de l'application.

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