Как я могу заставить livereload обслуживать мои файлы js?

Я использую webpy вместе с livereload, работает хорошо, я могу вносить изменения в модули приложения, и страница браузера перезагружается, как и ожидалось. Но livereload не может найти мои JS-файлы, я получаю 404, тогда как, когда я запускаю веб-приложение без livereload, файлы найдены, и я не получаю 404

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')

файлы JS хранятся внутри статической папки, как описано в webpy, но я вижу эту ошибку в своем терминале

[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

Если я изменю файл app.py, чтобы использовать app.run() вместо livereload, файлы JS будут обслуживаться, как и ожидалось.

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

Обновить

Добавление URL

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

person kristian nissen    schedule 12.02.2017    source источник
comment
Что вы установили urls для web.py?   -  person pbuck    schedule 12.02.2017
comment
Я добавил URL-адреса в вопрос. У меня нет статических файлов здесь   -  person kristian nissen    schedule 13.02.2017


Ответы (1)


web.py имеет ярлык: если URL-адрес начинается с /static/, файл загружается напрямую и возвращается запрашивающему. (Вы это уже знаете.)

Однако ярлык не загружается, если web.py не работает как простой HTTP-сервер. Когда вы загружаете его через livereload, вы используете веб-сервер Tornado, поэтому эта функция не загружается.

Не бойтесь: вы можете добавить его.

web/httpserver.py определяет эту функцию в StaticMiddleware, поэтому вы можете добавить ее в свою цепочку приложений:

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='*')

(Я не проводил тщательного тестирования, но, похоже, он работает нормально.)

person pbuck    schedule 13.02.2017
comment
Я почти уверен, что server.watch принимает один аргумент за раз: server.watch('static/') (новая строка) server.watch('templates/') - person busterroni; 19.01.2018