Google App Engine - сохраняйте статические файлы предыдущей версии - PullRequest
2 голосов
/ 01 октября 2019

Мы развернули Vue SPA в Google App Engine, и он полностью обслуживается статическими обработчиками.

Проблема, с которой мы сталкиваемся, заключается в том, что если пользователь активен на нашем сайте в середине развертывания, тоих старый манифест чека Webpack становится недействительным (поскольку хэши некоторых чанков перезаписываются). Если они теперь пытаются перенаправить на новую страницу, и эта страница пытается извлечь перезаписанный кусок, мы получаем следующую ошибку:

ChunkLoadError: Loading chunk Conversations failed.
(error: https://example.com/js/Conversations.71762189.js)

В идеале мы хотели бы сохранить N (2-3?) Предыдущие версии статических файлов приложения.

Является ли наш единственный способ отправить все ресурсы в облачное хранилище данных ? Если это так, как бы мы пошли на сокращение старых версий?

Вот мой app.yaml для справки:

runtime: nodejs10
instance_class: F4
automatic_scaling:
  min_instances: 2
  max_instances: 10
default_expiration: "30d"
error_handlers:
  - file: default_error.html
handlers:
- url: /api/*
  secure: always
  redirect_http_response_code: 301
  script: auto
- url: /js/*
  secure: always
  redirect_http_response_code: 301
  static_dir: dist/js
- url: /css/*
  secure: always
  redirect_http_response_code: 301
  static_dir: dist/css
- url: /img/*
  secure: always
  redirect_http_response_code: 301
  static_dir: dist/img
- url: /(.*\.(json|js|txt))$
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  upload: dist/.*\.(json|js|txt)$
  expiration: "10m"
- url: /.*
  secure: always
  redirect_http_response_code: 301
  static_files: dist/index.html
  upload: dist/index.html
  expiration: "2m"

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

Развертывание с использованием флага --no-promote и использование функции Traffic Migration в стандартной среде для постепенной миграции трафика на новую версию, чтобы все пользователи не испытывали немедленного переключения в тот момент, когдановая версия выходит в эфир. App Engine будет размещать как старые, так и новые версии (или «синие» и «зеленые») в течение периода времени, пока весь трафик не укажет на новую версию, а затем старая версия будет закрыта.

См. Также:

3 голосов
/ 02 октября 2019

Проблема обычно возникает, когда развертывание перезаписывает существующую версию службы, которая получает трафик (т. Е. Версия службы не изменяется). От Развертывание приложения :

Примечание : если вы развернете версию, в которой указан тот же идентификатор версии, что и версия, которая уже существует в App Engine,развернутые файлы перезапишут существующую версию. Это может быть проблематично, если версия обслуживает трафик, потому что трафик вашего приложения может быть прерван. Вы можете избежать прерывания трафика, если развернете новую версию с другим идентификатором версии, а затем переместите трафик на эту версию.

Пока версия службы развернута, а не удалена или не перезаписана соответствующие статические ресурсы. оставаться доступным.

Чтобы предотвратить проблему, всегда устанавливайте с использованием новой версии службы, а затем (постепенно) переносите трафик на вновь развернутую версию. Хранение последних версий N сервисов предоставит вам те N наборов статических ресурсов, которые вы желаете.

В общем, эта практика развертывания хороша / рекомендуется по нескольким другим причинам:

Потенциально представляет интерес: Сохранение внешнего интерфейса Google между развертываниями

...