Вопрос

Я запустил новую версию своего веб-сайта, но теперь CSS и статические изображения не развертываются должным образом.

Вот испорченная страница: http://www.gaiagps.com

Однако Appengine показывает последнюю версию как правильную: http://1.latest.gaiagps.appspot.com/

Какая-нибудь помощь?

Это было полезно?

Решение

Я видел это раньше на приложенном двигателе, даже при использовании параметров запроса запросов в кэше, как /stylesheets/default.css?{{ App.Version }}.

Вот моя (неподтвержденная) теория:

  1. Вы нажимаете новую версию, развернув или изменив новую версию для default.
  2. Хотя это обновление распространяется на все экземпляры GAE, запущенные вашему приложению ...
  3. ... Кто-то попадает в ваш сайт.
  4. Запрос на статический ресурс default.css{{ App.Version }} отправляется в CDN Google, который еще не имеет.
  5. CDN Google спрашивает GAE для ресурса до того, как пропагандирование от шага № 2 выполняется для всех экземпляров.
  6. Если вы не повезете, Gae предлагает ресурс из экземпляра, запущенного старой версией ...
  7. ... который теперь кэшируется в CDN Google в качестве авторитетной «новой» версии.

Когда это произойдет (если это то, что происходит), я могу подтвердить, что не поможет ни одному количеству разряженных кэш-браузера. Серверы Google CDN удерживают неправильную версию.

Чинить: Единственный способ исправить это, это развернуть другую версию. Вы не запускаете риск этого происхождения снова (если вы не сделали никаких изменений CSS с момента гонки), потому что даже если состояние гонки происходит, по-видимому, ваше первое обновление сделано к тому времени, которое вы развертываете второй, Так что все экземпляры будут служить правильной версии, независимо от того, что.

Другие советы

Ниже приведено то, что работало для меня.

  1. Обслуживайте файл CSS из статического домена. Это автоматически создается GAE.

    //static.yyyour-app-id }.appspot.com/?ss-file-path}

  2. Разверните ваше приложение. В этот момент ваше приложение будет нарушено.

  3. Измените версию файла CSS

    //static.??????-iD ust.appspot.com/?s-file-Path}}

  4. развернуть снова.

Каждый раз, когда вы меняете файл CSS. Вам придется повторить 2,3 и 4.

Ваша ссылка выглядит хорошо для меня, если я что-то не хватает.

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

Перейдите на 1.LATEST Скачать новые CSS, поскольку это не в вашем кэше, поэтому он выглядит правильно для вас.

У меня была эта проблема. Я использовал колбу с GAE, поэтому у меня не было статического обработчика в моем app.yaml. Отказ Когда я добавил это, развертывание работает. Попробуйте добавить что-то вроде этого

handlers:
- url: /static
  static_dir: static

на ваш app.yaml И разверните снова. Это сработало для меня. По-видимому, Google пытается оптимизировать, не обновляя файлы, которые он думает, что пользователи не могут видеть.

Как найден Shoresh, документы для стандартной среды для Pyhton указывают, что оба настройки для Срок действия статического кеша, отдельный элемент expiration и элемент верхнего уровня default_expiration, несут ответственность за определение «время истечения срока [что] будет отправлено в Cache-Control а также Expires HTTP-заголовки ответа HTTP ». Это означает, что« файлы могут быть кэшированы браузером пользователя, а также промежуточными прокси-серверами кэширования, такими как поставщики интернет-услуг ».

Проблема здесь заключается в том, что «повторное развертывание новой версии приложения будет нет сбросить любые кешики ». Так что, если кто-то установил default_expiration Для, например, 15 дней, но делает изменение в файле CSS или JS и повторно развертываем приложение, нет никакой гарантии, что эти файлы будут автоматически подаются из-за активных кэширования, особенно из-за промежуточных серверов кэширования прокси-серверов, которые могут Включите Google Cloud Servers - Что, кажется, так, поскольку доступ к вашему-Project-Name.appspot.com также обслуживает устаревшие файлы.

Одна и та же документация, связанная выше, говорится выше, что «если вы когда-либо планируете изменить статический файл, он должен иметь короткое время (менее часа) время истечения. В большинстве случаев по умолчанию 10-минутное время срока действия подходит». Это то, о чем нужно подумать до Установка любого статического срока действия кэша. Но для тех, кто, как и я, не знал все это заранее И уже были пойманы этой проблемой, я нашел решение.

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

Чтобы сделать это, направляйтесь к своему Google Cloud Console. и откройте свой проект. Под левым меню Гамбургера отправляйтесь на хранение -> браузер. Там вы должны найти хотя бы одно ведро: your-project-name.appspot.com. Под столбцом жизненного цикла нажмите на ссылку относительно вашего-Project-Name.appspot.com. Удалить любые существующие правила, поскольку они могут конфликтовать с тем, что вы создадите сейчас.

Создайте новое правило, нажав кнопку «Добавить правило». Для условий объекта выберите Только Опция «Новера версии» и установить его на 1. Не забудьте нажать кнопку «Продолжить». Для действия выберите «Удалить» и нажмите кнопку «Продолжить». Сохраните свое новое правило.

Это недавно созданное правило займет до 24 часов, чтобы вступить в силу, но, по крайней мере, для моего проекта, потребовалось всего несколько минут. Как только он работает и работает, версия файлов обслуживается вашим приложением под PRY-PROJECT-Name.appspot.com всегда будет последним развернутым, решение проблемы. Кроме того, если вы регулярно редактируете свои статические файлы, вы должны удалить default_expiration Элемент из файла app.yaml, который поможет избежать непреднамеренного кэширования другими серверами.

Вот что работает для меня:

Во-первых, я изменил версия на app.yaml..

Затем выполните следующие действия ниже

Перейдите в свою консоль -> нажмите на свой проект.

В боковом меню нажмите Вычисление -> Версии:

Там это будет все версии, а какая версия по умолчанию. Мой был установлен на более старую версию.

Отметьте новую версию.

Для меня работал. Любые проблемы?

Из документов для стандартной среды для Pyhton: static_cache_expiration..

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

Для новых людей, приходящих к этому старым вопросам / набор ответов, которые я хотел дать обновленный ответ. Я думаю, что в 2018-19-19 годы следующая информация, вероятно, исправит большинство вопросов обновления CSS, имеющие:

Убедитесь, что вы app.yaml имеет следующее:

 handlers:
   - url: /static
     static_dir: static
  • Бегать gcloud app deploy
  • Охладите на 10 минут .. и перезагрузить свой сайт

Хорошо, для более новых людей, видя эту проблему, я попробовал подход к кэше, и, похоже, исправил его, является примером того, что я сделал для импорта CSS в файле app.cfg, создайте переменную для удержания вашего AppID, как установлено в App.yaml файл и установите его ниже

<link href="{{ url_for('static', filename='file.css') }}?{{config.APP_ID}}" rel="stylesheet"> 

Также для файла app.yaml добавьте этот конфигурацию, чтобы быть на безопасной стороне

обработчики:

  • URL: / статический static_dir: статический

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top