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
ce qui est logique puisque Tornado me sert ça comme fichier index.html
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
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)
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>
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()vuejs_handler.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 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), ]
voilà voilà
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"))
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)
Partager