2017-02-12 1 views
0

Im utilisant webpy avec le chargement du foie, fonctionne bien, je peux apporter des modifications aux modules de l'application et les rechargements de la page du navigateur comme prévu. Mais livereload ne peut pas trouver mes fichiers JS, je reçois un 404 alors que quand je lance l'application webpy sans livereload, les fichiers sont trouvés et je ne suis pas un 404Comment est-ce que je peux obtenir le chargement de foie pour servir mes dossiers de js?

from livereload import Server 

import web 

from nestpas.views import * 
from nestpas.urls import * 
import sys 

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) 

# web.config.debug = False 
web.ctx.debug = False 

app = web.application(urls, globals(), autoreload=False) 
webapp = app.wsgifunc() 

# Setup session storage 
db = web.database(dbn='sqlite', db='dev.db') 
store = web.session.DBStore(db, 'sessions') 
session = web.session.Session(app, store, 
    initializer={'login': 0} 
) 

if __name__ == '__main__': 
    # app.run() 
    server = Server(webapp) 
    server.watch('static/', 'templates/', 'nestpas/') 
    server.serve(port=8080, host='localhost') 

les fichiers JS sont stockés à l'intérieur le dossier statique tel que décrit par webpy, mais je vois cette erreur dans mon terminal

[W 170212 09:08:53 wsgi:355] 404 GET /static/js/require.js (::1) 26.46ms 
WARNING:tornado.access:404 GET /static/js/require.js (::1) 26.46ms 

Si je change le fichier app.py à utiliser app.run() au lieu de livereload les fichiers JS sont servis comme prévu

127.0.0.1:55534 - - [12/Feb/2017 09:16:15] "HTTP/1.1 GET /static/js/require.js" - 200 

Mise à jour

URL Ajout

urls = (
    '/', 'Index', 
    '/blog/(.+)/', 'Blog', 
    '/login/', 'Login', 
    '/logout/', 'Logout', 
    '/admin/', 'Admin', 
    '/media/', 'Media', 
    '/entry/(.+)?', 'Entry' 
) 
+0

À quoi avez-vous défini 'urls' pour web.py? – pbuck

+0

J'ai ajouté des URL à la question. Je n'ai pas les fichiers statiques ici –

Répondre

0

web.py a un raccourci: si le chemin d'URL commence par /static/, le fichier est directement chargé et renvoyé au demandeur. (Vous le savez déjà.)

Toutefois, le raccourci n'est pas chargé à moins que web.py ne soit exécuté en tant que serveur HTTPS simple. Lorsque vous le chargez via le chargement de votre site, vous utilisez le serveur Web tornado. Cette fonctionnalité n'est donc pas chargée.

: Ne crains point, vous pouvez l'ajouter dans

web/httpserver.py définit cette fonctionnalité dans StaticMiddleware, vous pouvez l'ajouter à votre chaîne d'application.

if __name__ == '__main__': 
    import web.httpserver 
    static_plus_webapp = web.httpserver.StaticMiddelware(webapp) 
    server = Server(static_plus_webapp) 
    server.watch('static/', 'templates/') 
    server.serve(port=8080, host='*') 

(je ne l'ai pas fait des tests approfondis, mais cela semble fonctionner correctement.)

+0

Heureka! ça marche –

+0

Nous avons tous deux appris quelque chose de nouveau! – pbuck

+0

Je suis sûr que 'server.watch' prend un seul argument à la fois: ' server.watch ('static /') '(nouvelle ligne) ' server.watch ('templates /') ' – busterroni