Подтвердить что ты не робот

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

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

Спасибо!

4b9b3361

Ответ 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/'

Если вы хотите хранить свои статические и мультимедийные файлы в разных подпапках, это отличное решение: fooobar.com/info/70682/...

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

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

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

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