python - example - matraz no ve cambio en el archivo.js
flask caching memoize (2)
En última instancia, este es un problema frustrante de la memoria caché del navegador, que puede resolverse forzando al navegador a realizar una "actualización", que será una pulsación de tecla dependiente del navegador / sistema operativo, pero generalmente esto funciona:
- Windows: Ctrl + F5
- Mac: Cmd + Shift + R
- Linux: Ctrl + Shift + R
Hay otros trucos de nombre de archivo que se pueden usar para evitar este problema (mencionados en los comentarios del OP). Estos son especialmente importantes en la producción donde no tienes control sobre el comportamiento del navegador.
Para las respuestas del Frasco no estático, puede establecer la propiedad cache_control.max_age
, que debe indicar al navegador cuándo debe caducar la respuesta si se almacena en la cache_control.max_age
caché. Por ejemplo, si tiene un punto final Flask XHR que devuelve datos JSON, podría hacer esto:
@app.route(''/_get_ajax_data/'')
def get_ajax_data():
data = {"hello": "world"}
response = jsonify(data)
response.cache_control.max_age = 60 * 60 * 24 # 1 day (in seconds)
return response
Por lo general, también puede establecer valores predeterminados en la configuración de su servidor web de producción para tipos de recursos específicos (por ejemplo, CSS / JS / HTML / JSON / etc)
Hice un cambio en uno de los archivos .js
que uso y no importa lo que haga, el matraz insiste en recoger, desde la memoria caché, la última versión del archivo, sin el cambio.
Para aclarar, tengo la siguiente estructura. Todo comienza con foo.html
return render_template foo.html
foo.html
tiene un formulario dentro que llama a matraz con algunos datos y luego devuelve una segunda plantilla bar.html
:
return render_template bar.html
Esta segunda plantilla llama a algún archivo .js
, ubicado en la carpeta static
, pero no se actualiza cuando cambia el código.
Menciono la estructura anterior porque si el archivo .js
se colocara en foo.html
lugar de bar.html
, Flask recogería los nuevos cambios en el archivo. Pero en bar.html
Flask los ignora por completo.
¿Que esta pasando?
Lo único que funcionó fue hacer clic en "deshabilitar caché" en el navegador y volver a cargar.
Si está sirviendo sus activos estáticos con Flask (esto suele ser el caso en un entorno de desarrollo), es posible que deba establecer el valor de configuración SEND_FILE_MAX_AGE_DEFAULT
:
La edad máxima del control de caché predeterminado para usar con
send_static_file()
(el controlador de archivo estático predeterminado) ysend_file()
, comodatetime.timedelta
o como segundos. Reemplace este valor por archivo utilizando el ganchoget_send_file_max_age()
en Flask o Blueprint, respectivamente. El valor predeterminado es 43200 (12 horas).
Resolver esto puede ser tan simple como actualizar el diccionario app.config
, así:
app = Flask(__name__)
...
app.config[''SEND_FILE_MAX_AGE_DEFAULT''] = 0
Si lo hace, su navegador no almacenará en caché los activos estáticos que son atendidos por Flask.