我正在尝试使用CherryPy提供静态文件,但我无法做到。我查看了教程,但是设置它也没有正常工作。
所有这些都使用Python 3.4
配置
config = {
'/ws': {
'tools.websocket.on': True,
'tools.websocket.handler_cls': ChatWebSocketHandler,
'tools.websocket.protocols': ['toto', 'mytest', 'hithere']
},
'/assets': {
'tools.staticdir.on': True,
'tools.staticdir.dir': constants.TEMPLATE_PATH
},
}
我正在启动像这样的
app_root = Root(args.host, args.port, args.ssl, ssl_port=args.ssl_port)
cherrypy.quickstart(app_root, '', config=config)
Constant Path
TEMPLATE_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)),"assets/")
我尝试使用assets/
,/assets/
之类的路径,而不是上面的常量。
问题是它无法识别其中任何一个并且总是出现404错误。
答案 0 :(得分:1)
我也很难设置它。我有一个相当复杂的设置,包含多个子域,这些子域已经在几个早期版本的CherryPy中发展,这些版本可能已经不再有效了,而且我没有证实这可以在你在这里更简单的快速入门配置中使用。但是,实际适用于我的设置中的关键行是将配置行放在您挂载的webservice对象中。我把配置dict在任何资源之前定义了类定义中的静态目录。在我看来,你已经在配置字典中定义了静态目录,而不是特定资源而不是对象。所以也许尝试托管服务对象:
class WebService(object):
_cp_config = {
'tools.staticdir.on': True,
'tools.staticdir.dir': '/path/to/serve/static/files/from'
}
@cherrypy.expose
def index(self):
[ ...additional resource definitions, etc ...]
然后是:
my_cp_app =
cherrypy.tree.mount(subDomain.WebService(),
'/subdomainFileLocation',
subdomainConfigDict)
cherrypy.quickstart(config=domainConfig)
我知道你正在使用Python 3.以上内容适用于Python 2.7 + cherrypy-8.1.2。我希望这是有帮助的。