Правильный способ работы со статическими файлами и шаблонами для Django на Heroku


Я перемещаю свое приложение django на Heroku, и мне было интересно, Как правильно обрабатывать статические файлы. Я что, просто толкаю их через git на Heroku? Или я должен хранить их на SW3 или что-то в этом роде? Кроме того, каким должен быть STATIC_ROOT и так далее?

Спасибо!

1   29   2012-07-20 00:54:22

1 ответ:

Вы должны хранить их внешне на сервисе, таком как S3 - в то время как Heroku может обслуживать статические файлы, он не предназначен для этого.

Вот хороший пример для начала работы с S3:

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

Использовать django-хранилища http://django-storages.readthedocs.org/en/latest/index.html для сбора статических файлов в корзину S3 и их соответствующего обслуживания.

Вот необходимые настройки, которые вам понадобятся для 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 и STATIC_ROOT заменяются DEFAULT_FILE_STORAGE и STATICFILES_STORAGE соответственно и, следовательно, не нужны. Вы, однако, захотите установить MEDIA_URL и STATIC_URL на что-то вроде

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

Если вы хотите хранить статические и мультимедийные файлы в разных подпапках, это отличное решение: https://stackoverflow.com/a/10825691/674794

Вы хотите установить MEDIA_URL и STATIC_URL в соответствующие новые папки, например

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

Вы также хотите, чтобы вручную выполнить manage.py collectstatic и отключить в Heroku автоматическая collectstatic как в https://devcenter.heroku.com/articles/django-assets#disabling_collectstatic, так как в Heroku collectstatic будет выкладывание всех статических файлов на S3 каждый раз, когда вы нажимаете даже если файлы не были изменены, добавив изрядную передачи и запрос на загрузку в S3 и замедляя работу толкает.

Тогда просто продолжайте использовать {{STATIC_URL }} в ваших шаблонах как обычно, и вы должны быть настроены!

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

Если вы хотите начать с простого и не сразу выбрать этот маршрут, вы можете сделать быстрый Хак в конфигурации URL-адресов, следуя упомянутому сообщению Сесара в Heroku - обработка статических файлов в приложении Django , хотя это приведет к значительному снижению производительности приложения.