bonjour,

alors voici un peu le contexte, j'utilise Tornado en tant que serveur web et framework web, le framework web me sert à construire un api, et avec Tornado je sert également des fichiers "statics" en faite il s'agit de fichier construit via webpack et avec une transcompilation babel pour pouvoir utiliser la syntaxe ES6 (j'utilise le framework VueJS)

Le problème étant que ces fichiers statiques peuvent tout de même changer au court du temps (à chaque nouveau build, le résultat du build est dans le dossier dist) et voici le genre d'erreur que j'obtient coté Tornado
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
404 GET /js/chunk-vendors.f81239f6.js (192.168.43.243) 0.58ms
404 GET /js/app.6b849377.js (192.168.43.243) 3.49ms
ce qui est logique puisque Tornado me sert ça comme fichier index.html
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang=en>
    <head>
        <meta charset=utf-8>
        <meta http-equiv=X-UA-Compatible content="IE=edge">
        <meta name=viewport content="width=device-width,initial-scale=1">
        <link rel=icon href=/static/favicon.ico>
        <title>site</title>
        <link href=/css/app.ae36ad83.css rel=preload as=style>
        <link href=/js/app.6b849377.js rel=preload as=script>
        <link href=/js/chunk-vendors.f81239f6.js rel=preload as=script>
        <link href=/css/app.ae36ad83.css rel=stylesheet>
    </head>
    <body>
        <noscript>
            <strong>We're sorry but site doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
        </noscript>
        <div id=app></div>
        <script src=/js/chunk-vendors.f81239f6.js></script>
        <script src=/js/app.6b849377.js></script>
    </body>
</html>
or ce fichier là (index.html) n'existe plus, enfin les sources des scripts ont changées (devrait être src=/js/chunk-vendors.a4d141f7.js et src=/js/app.c5f62c85.js dans les sources du index.html)

et du coup ... je me retrouve avec une page blanche

voilà comment je sert tout ce beau monde:

server.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
import asyncio
 
import tornado.web
 
import config
from routes import routes
 
if sys.platform == 'win32':
	asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
 
 
app = tornado.web.Application(routes)
 
server = tornado.httpserver.HTTPServer(app)
server.bind(8888)
server.start(0)  # forks one process per cpu
 
 
loop = asyncio.get_event_loop()
loop.run_forever()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
routes.py
import os
 
import tornado.web
 
import config
 
from handler.test_handler import TestHandler
from handler.vuejs_handler import VueJSRenderHandler
 
 
routes = [
	(r"/api/test", TestHandler),
	(r'/js/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(config.DIST_PATH, "js", "")}),
	(r'/css/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(config.DIST_PATH, "css", "")}),
	(r'/img/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(config.DIST_PATH, "img", "")}),
	(r'/static/(.*)', tornado.web.StaticFileHandler, {'path': os.path.join(config.DIST_PATH, "static", "")}),
	(r"/.*", VueJSRenderHandler),
]
vuejs_handler.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
import os
 
import tornado.web
 
import config
 
class VueJSRenderHandler(tornado.web.RequestHandler):
	async def get(self):
		self.render(os.path.join(config.DIST_PATH, "index.html"))
voilà voilà
la mise en cache ce fait bien coté Tornado, en vidant/désactivant le cache de mon navigateur j'ai le même problème, mais en relançant le serveur Tornado c'est tout bon.

Je pourrais toujours gérer par moi même la mise en cache en stockant la date de création du dit fichier index.html et son contenu avec un bon vieux open (de toute façon on va pas se mentir à un moment où un autre Tornado doit bien le faire) mais ça évitera en plus tout le travail que fait Tornado (render fait plus que de servir un fichier statique)
d'ailleurs le moyen le plus propre est sans doute d'utiliser un StaticFileHandler, mais comment fixer le fichier à rendre peut import l'url ? (en attendant des réponses je regarde voir les sources de StaticFileHandler afin de voir comment subclassé ça proprement)