Бесшовные обновления Django с CDN - PullRequest
3 голосов
/ 24 сентября 2011

[Я использую AWS, но я думаю, что этот вопрос актуален для всех CDN]

Я хочу беспрепятственно развернуть мой сервер Django в облаке AWS.
Весь статический контент (например, изображения, javascript и т. Д.) Поступает в CDN Amazon Cloudfront.
Проблема в том, что я пытаюсь сделать обновление как можно более «атомарным», хотя у меня очень мало контроля над временемнедействительности объекта CDN.
В соответствии с TFM, решение заключается в том, чтобы создать версию моих объектов, то есть переименовать их, добавив идентификатор версии, например, arrow_v123.png.Очевидно, что если новый сервер указывает на arrow_v124.png, я полностью контролирую сроки всего распространения.
Я проверил и, насколько я могу судить, большие мальчики делают это - объекты статического контента Facebook имеют хеш-имя (ипуть).

НО КАК Я АВТОМАТИЧЕСКИ ДЕЛАЮ ЭТО В ДЖАНГО?

Мне нужно как-то:

  • Создать новый номер версии
  • Измените все имена всех статических объектов
  • Измените все шаблоны и код Python для использования этих новых имен

Или каким-либо образом интегрируйте с разработкойпроцесс:

  • Я редактирую изображение или файл javascript
  • Я сохраняю его и он получает новое имя?!?!и все ссылки на него автоматически исправляются?!?!

Я использую Fabric для развертываний, поэтому имеет смысл каким-то образом изменить мой fabfile.

Пожалуйста, помогите.

Тал.

Ответы [ 4 ]

3 голосов
/ 26 сентября 2011

http://www.allbuttonspressed.com/projects/django-mediagenerator обеспечивает управление активами.Он предоставляет функцию и тег шаблона, чтобы дать вам версионное имя файла из фактического имени файла.Он также имеет несколько приятных дополнений, таких как минификация и конкатенация js / css.

1 голос
/ 25 сентября 2011

Взгляните на html5boilerplate, он имеет скрипты сборки ant, которые, как и многое другое, переименовывают ваши статические ссылки js / CSS в случайное число и заменяют любые ссылки в файлах шаблонов на эти новые случайные номера js / CSS , Я не думаю, что это делает то же самое для ресурсов изображений, но я полагаю, что файлы ant могут быть изменены, чтобы выполнить то же самое.

Порт Django html5boilerplate находится здесь: https://bitbucket.org/samkuehn/django-html5-boilerplate

0 голосов
/ 01 мая 2012

Я бы добавил случайную строку в конец всех статических ресурсов, которые вы часто обновляете.

Пример: style.css станет style.css? ASFDSF34343SDSFDSF

В режиме отладки,Я гарантирую, что случайная строка изменяется при каждом запросе, поэтому мои изменения вступают в силу немедленно.(это предотвращает кэширование в браузере)

В процессе работы случайная строка генерируется ТОЛЬКО один раз при запуске и затем используется повторно.

Вы можете использовать ее, чтобы случайная строка оставалась после перезапускаи ваш веб-сервер.

Это работает очень хорошо для меня, как во время разработки, так и на производстве.

Помните, что я держу свои активы на S3 и не включилCloudFront пока нет.

Вот фактический пример:

http://static.outsourcefactor.com/css/main.css?ASDFASFASF434434

0 голосов
/ 24 сентября 2011

Мне кажется, что последняя часть (изменить все шаблоны и код Python для использования новых имен) проста. Сохраните текущий стиль «номер версии» в ваших настройках. Убедитесь, что этот номер версии передан вашим шаблонам с использованием контекста шаблона. Затем используйте это при рендеринге шаблонов, чтобы выбрать реальный URL для статических файлов.

Шаги, связанные с публикацией нового набора статических файлов:

  1. опубликовать новые файлы на CDN
  2. отредактируйте файл настроек
  3. перезагрузите настройки приложения

Вы можете добиться такого же типа эффекта, используя аналогичную схему, сохраняя номер версии в базе данных, а не в настройках. Это позволяет избежать перезагрузки и немедленных изменений, но добавляет запрос к БД при каждом рендеринге представления.

Как вы интегрируете каждый из этих шагов в процесс разработки, зависит от вас. Может быть возможно (условно) автоматизировать публикацию в CDN, отредактировать файл настроек и перезапустить приложение. Чтобы легко «отредактировать» файл настроек, вы можете сохранить номер версии в отдельном файле и прочитать файл настроек при запуске.

...