如何让 livereload 为我的 js 文件提供服务?
How can I get livereload to serve my js files?
我将 webpy 与 livereload 一起使用,效果很好,我可以对应用程序模块进行更改,并且浏览器页面会按预期重新加载。但是 livereload 找不到我的 JS 文件,我得到一个 404,而当我 运行 没有 livereload 的 webpy 应用程序时,找到了文件,但我没有得到 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 文件存储在 static 文件夹中,如 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'
)
web.py
有一个捷径:如果URL路径以/static/
开头,则直接加载文件返回给请求者。 (你已经知道了。)
但是,除非 web.py 运行 作为简单的 HTTPServer,否则不会加载快捷方式。当您通过 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='*')
(我没有进行广泛的测试,但它似乎工作正常。)
我将 webpy 与 livereload 一起使用,效果很好,我可以对应用程序模块进行更改,并且浏览器页面会按预期重新加载。但是 livereload 找不到我的 JS 文件,我得到一个 404,而当我 运行 没有 livereload 的 webpy 应用程序时,找到了文件,但我没有得到 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 文件存储在 static 文件夹中,如 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'
)
web.py
有一个捷径:如果URL路径以/static/
开头,则直接加载文件返回给请求者。 (你已经知道了。)
但是,除非 web.py 运行 作为简单的 HTTPServer,否则不会加载快捷方式。当您通过 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='*')
(我没有进行广泛的测试,但它似乎工作正常。)