Pregunta

Me empujó una nueva versión de mi sitio web, pero ahora el CSS y las imágenes estáticas no va a implementar correctamente.

Aquí está la página en mal estado: http://www.gaiagps.com

AppEngine muestra la versión más reciente como correcto aunque: http: //1.latest.gaiagps.appspot .com /

Cualquier ayuda?

¿Fue útil?

Solución

he visto esto antes en App Engine, incluso cuando se utilizan los parámetros de consulta almacenamiento en memoria caché como /stylesheets/default.css?{{ App.Version }}.

Esta es mi teoría (sin confirmar):

  1. empujar una nueva versión mediante el despliegue o el cambio de una nueva versión de default.
  2. Si bien esta actualización está siendo propagado a todas las instancias GAE funcionamiento de su aplicación ...
  3. ... alguien golpea su sitio.
  4. La solicitud de default.css{{ App.Version }} recurso estático es enviado a CDN de Google, que aún no cuenta con él.
  5. CDN de Google solicita GAE para el recurso antes de la propagación desde el paso # 2 está hecho para todos los casos.
  6. Si tiene la mala suerte, GAE sirve el recurso de una instancia en ejecución la versión antigua ...
  7. ... que ahora se almacenan en caché en el CDN de Google como la autoridad "nueva" versión.

Cuando esto (si esto es lo que sucede) sucede, puedo confirmar que ninguna cantidad de trabajo del navegador cachebuster ayudará. Los servidores de Google CDN están sosteniendo la versión incorrecta.

Para fijar: La única forma que he encontrado para solucionar este problema es desplegar otra versión. Usted no se corre el riesgo de que esto ocurra de nuevo (si no se ha realizado ningún cambio CSS desde la condición de carrera), porque incluso si se produce la condición de carrera, es de suponer que su primera actualización se realiza en el momento de implantar el segundo, por lo que todos los casos estarán sirviendo la versión correcta no importa qué.

Otros consejos

Lo que sigue es lo que ha funcionado para mí.

  1. Servir a su archivo css del dominio estático. Esto es creado automáticamente por GAE.

    // estática. {Su-app-id} .appspot.com / {css-file-path}

  2. desplegar su aplicación. En este punto se romperá su aplicación.

  3. cambiar la versión del archivo CSS

    // estática. {Su-app-id} .appspot.com / {css-file-path}? V = {versión Name}

  4. desplegar de nuevo.

Cada vez que cambie el archivo css. tendrá que repetir 2,3 y 4.

Su enlace se ve bien a mí, a menos que me falta algo.

Es posible que haya almacenado en caché de su edad CSS, y no conseguir el nuevo CSS después de su actualización. Prueba a borrar la caché del navegador y ver si funciona.

El ir a descargas 1.Latest el nuevo CSS, ya que no está en la memoria caché, por lo que aparece correctamente en su caso.

he tenido este problema también. Yo estaba usando matraz con GAE, así que no tengo un controlador estático en mi app.yaml. Cuando lo añadí, el despliegue funciona. Trate de añadir algo como esto

handlers:
- url: /static
  static_dir: static

a su app.yaml y desplegar de nuevo. Se trabajó para mí. Al parecer Google está tratando de optimizar al no actualizar archivos que se cree que los usuarios no pueden ver.

como se encuentra por shoresh , la documentación para el medio ambiente estándar para el estado Pyhton que ambos ajustes para estática caducidad de la caché , expiration elemento individual y el elemento default_expiration de nivel superior, son responsables de la definición de" el tiempo de espera [que] será enviado en el Cache-Control y cabeceras de respuesta HTTP Expires". Esto significa que "los archivos son susceptibles de ser almacenado en caché por el navegador del usuario, así como por los servidores de almacenamiento en caché de proxy intermedios, tales como proveedores de servicios de Internet".

El problema aquí es que "re-despliegue de una nueva versión de la aplicación no restablecer cualquier caché". Así que si uno tiene conjunto default_expiration a, por ejemplo, 15 días, pero hace un cambio en un archivo CSS o JS y volver a desplegar la aplicación, no hay ninguna garantía de que esos archivos serán servidos automáticamente debido a cachés activos, sobre todo debido a la intermedia almacenamiento en caché de los servidores proxy, que puede incluir servidores de Google cloud -. lo que parece ser el caso, ya que accede your-project-name.appspot.com también sirve archivos obsoletos

La misma documentación vinculado anteriormente establece que "si alguna vez va a modificar un archivo estático, debe tener un corto (menos de una hora) tiempo de caducidad. En la mayoría de los casos, el valor predeterminado de tiempo de caducidad de 10 minutos es apropiado". Esto es algo que uno debe pensar en antes Configuración de la expiración de caché estática. Pero para aquellos que, como yo, no sabía todo esto de antemano y ya han sido capturados por este problema, he encontrado una solución.

A pesar de que la documentación indica que no es posible borrar esos servidores proxy caché intermedios, se puede eliminar al menos el caché de Google Cloud.

Con el fin de hacerlo , la cabeza a su Google Cloud Console y abra su proyecto. Bajo el menú de hamburguesa izquierdo, la cabeza de Almacenamiento -> Navegador. Hay que debe encontrar al menos un cubo: your-project-name.appspot.com. En la columna del ciclo de vida, haga clic en el enlace con respecto a your-project-name.appspot.com. Eliminar las normas vigentes, ya que pueden entrar en conflicto con la persona que va a crear ahora.

Crear una nueva regla haciendo clic en el botón 'Añadir regla'. Para las condiciones de objetos, elija sólo la opción 'versión más reciente' y ponerlo a 1. No se olvide de hacer clic en el botón 'Continuar'. Para la acción, seleccione 'Borrar' y haga clic en el botón 'Continuar'. Guardar la nueva regla.

Esta regla recién creada tendrá un máximo de 24 horas para tener efecto, pero al menos para mi proyecto en tan sólo unos minutos. Una vez que esté en funcionamiento, la versión de los archivos que están siendo servido por su aplicación bajo your-project-name.appspot.com será siempre la última desplegado , la solución del problema. También, si está editando regularmente sus archivos estáticos, debe quitar el elemento default_expiration del archivo app.yaml, lo que ayudará a evitar el almacenamiento en caché no deseado por otros servidores.

A continuación cuál está trabajado para mí:

En primer lugar, he cambiado el versión en app.yaml .

A continuación, siga estos pasos:

Ir a la consola -.> Haga clic en el Proyecto

En el menú lateral, haga clic en Computación -> Versiones

No será todas las versiones, y qué versión es la predeterminada. Mina se fijó a una versión anterior.

Marcar la nueva versión.

Para mí trabajado. Cualquier preocupación?

A partir de la documentación para el medio ambiente estándar para Pyhton: static_cache_expiration .

Después de un archivo se transmite con un tiempo de caducidad dado, hay en general, no hay manera de sacarlo de cachés intermedias, incluso si el usuario borra su propia memoria caché del navegador. Re-despliegue de una nueva versión de la aplicación no se restablecerá cualquier caché. Por lo tanto, si alguna vez va a modificar una archivo estático, debe tener un corto (menos de una hora) de caducidad hora. En la mayoría de los casos, el valor predeterminado tiempo de expiración 10 minutos es apropiado.

Para las personas nuevas que vienen a esta antigua pregunta / conjunto de respuestas que quería dar una respuesta actualizada. Creo que en 2018-19 la siguiente información probablemente solucionar la mayoría de los problemas de actualización de CSS gente está teniendo:

Asegúrese de que su app.yaml tiene la siguiente:

 handlers:
   - url: /static
     static_dir: static
  • Ejecutar gcloud app deploy
  • Chill durante 10 minutos .. y el cambio-recarga su sitio web

Para Ok nuevas personas que ven este problema he intentado el enfoque caché-reventar y parecen haber fijado aquí es un ejemplo de lo que hice para la importación de archivos css en app.cfg crear una variable para contener el id de aplicación como en conjunto app.yaml archivo y configurarlo como una continuación

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

También para el archivo app.yaml añadir esta configuración para estar en el lado seguro

manipuladores:

  • url: / estática static_dir: estática

Trate de compensación caché de su navegador. Tenía exactamente el mismo problema y lo consiguió fija simplemente borrar la memoria caché.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top