龙卷风的几个静态目录

时间:2016-09-08 10:32:41

标签: python tornado assets

我们正在建立基于龙卷风的uServices。所有uServices都有一些共同的路由,暂时为healthdocs。 docs路由使用Swagger构建。这意味着,swagger路由和相关资产是我们公共库的一部分(但不是文档本身,与uService相关),这只是我们的uServices的一个要求。

由于swagger需要静态资产,并且每个uService也需要自己的静态资产,所以我遇到了一个问题:我的静态资产来自两个完全不同的地方。我找到了一个(非常不方便)的黑客来解决这个问题:

  1. 跟踪公共仓库中的静态资产
  2. 跟踪uService仓库中的静态资产
  3. 部署时,将这些静态资产从两个源复制到部署静态文件夹(并希望没有冲突)
  4. 将部署静态文件夹指定为static_path
  5. 第3步非常复杂,因为它涉及到pip安装公共库,在那里找到资产(已经是黑客),并复制它们:

    • 使用pip安装公共库
    • 查找已安装的库的位置(site-packages
    • 将静态资产复制到部署静态文件夹

    如果像template_path一样,那么就可以拥有一个每个应用程序的静态文件夹:

    > Return None to load templates relative to the calling file.
    

    我一直在网上搜索,似乎this is not possible,但我想仔细检查。

    另一种方法是简化从打包的python模块中提取资产,但不确定执行此操作的首选方法是什么,而不必在virtualenv中针对site-packages重复搜索

1 个答案:

答案 0 :(得分:1)

使用static_path设置无法执行此操作,但只要您不需要static_url()功能,就可以在URLSpec列表中创建多个StaticFileHandler条目:

Application([
    ('/static1/(.*)', tornado.web.StaticFileHandler, dict(path='static1')),
    ('/static2/(.*)', tornado.web.StaticFileHandler, dict(path='static1')),
])

作为static_url的替代,您可以调用StaticFileHandler.make_static_url并向其传递使用static_path时可能是全局的参数。