使用autoload.js为散景中的静态资源路径定义前缀

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用autoload.js为散景中的静态资源路径定义前缀相关的知识,希望对你有一定的参考价值。

我有一个服务,像这样旋转Bokeh服务器实例:

server = Server({"/": app}, io_loop=loop, port=port, 
allow_websocket_origin=['localhost:%d'%port, origin, self.request.host])

此服务在代理(nbserverproxy)后运行,客户端只能通过localhost:<port>/<path>访问example.com/proxy/<port>/<path>

我正在尝试返回一个脚本标记,它将加载我的散景应用程序,确保从example.com/proxy/<port>/<path>请求资源

目前我生成这个标签是这样的:

script = """<script
        src="{protocol}://{origin}{prefix}autoload.js?bokeh-autoload-element={ele_id}&bokeh-absolute-url={protocol}://{origin}&bokeh-app-path={prefix}"
        id="{ele_id}"
        data-bokeh-model-id=""
        data-bokeh-doc-id=""
    ></script>""".format(protocol=protocol, origin=origin, prefix=prefix, ele_id=ele_id) 

其中(对于在端口45740上运行的散景渲染类似于:

<script
        src="https://example.com/proxy/45740/autoload.js?bokeh-autoload-element=0535b6ca-6af2-4fcf-aa51-66d642fd3b08&bokeh-absolute-url=http://localhost:8888&bokeh-app-path=/proxy/45740/"
        id="0535b6ca-6af2-4fcf-aa51-66d642fd3b08"
        data-bokeh-model-id=""
        data-bokeh-doc-id=""
    ></script>

不幸的是,在这个JS中,这个标签会正确地返回一些javascript,它会尝试在以下位置加载JS / CSS资源:

https://example.com/static/js/bokeh.min.js

而不是

https://example.com/proxy/45740/static/js/bokeh.min.js

我无法想办法告诉散景它是在代理背后,所有路径从客户端的角度开始'/ proxy / 45740 /'。

我尝试使用prefix arg启动服务器,例如:

Server({"/": app}, prefix="/proxy/%s"%port, io_loop=loop, port=port, allow_websocket_origin=['localhost:%d'%port, origin, self.request.host])

这不起作用,因为代理在到达散景服务器之前剥离了/proxy/<port>前缀,因此这不会传递给散景服务器,散景服务器给出404,因为它期望所有路径的前缀。

有解决方案吗

答案

这是prefix的预期目的,nbserverproxy的自动行为似乎很不幸。

一种可能的解决方案可能是让您的代理直接提供BokehJS资源,而不是让Bokeh服务器执行此操作。许多代理都针对提供静态资源进行了优化,这也减少了Bokeh服务器上的负载,这可能与您的情况相关。

我对nbserverproxy一无所知,但你可以看到demo.bokehplots.com网站如何用nginx做到这一点:

https://github.com/bokeh/demo.bokehplots.com

要点是:将BokehJS文件复制到某个本地目录,并将您的代理配置为https://example.com/static/服务该目录

以上是关于使用autoload.js为散景中的静态资源路径定义前缀的主要内容,如果未能解决你的问题,请参考以下文章

如何删除散景中悬停收费的“屏幕信息”?

如何在散景中绘制纬度和经度

悬停工具在散景中不起作用[重复]

在散景中悬停多行字形时如何显示单个值?

散景地图情节。纬度/经度到 x 和 y

散景内联嵌入,“加载资源失败”