IIS安装程序上的Bokeh服务器

时间:2017-03-02 11:51:16

标签: python iis deployment server bokeh

我正在尝试弄清楚如何在IIS服务器上部署Bokeh滑块图表。 我最近完成了一个Flask应用程序,所以我想我会尝试你嵌入烧瓶的路线:

https://github.com/bokeh/bokeh/tree/master/examples/howto/server_embed

当我在本地启动脚本时,它很简单,但我似乎无法在IIS上正确设置它。我相信复杂性源于这样一个事实,即我用于在IIS上部署的wfastcgi.py模块在没有类似黑客攻击的情况下不能轻易实现多线程。

所以,我的第二次尝试是将烧瓶应用程序包裹在龙卷风中,如下面的选项B所示 (没有太大的成功,但仍然认为这是我最好的领导)

Run Flask as threaded on IIS 7

我的第三次尝试是尝试在特定端口上独立运行Bokeh服务器。我想我可以通过standalone_embed.py使用wfastcgi.py在端口8888&上运行服务器。同时使用端口5000进行服务器回调。但是,服务器功能:

from bokeh.server.server import Server

仍然在主机上本地启动它

server = Server({'/': bokeh_app}, io_loop=io_loop, port=5000)
server.start()

如果我在主机上转到http://localhost:5000/,这实际上是有效的, 但如果我从远程机器转到http://%my_host_ip%:5000/,则会失败。

我甚至尝试手动设置主机但收到“无效主机”错误:

server = Server({'/': bokeh_app}, io_loop=io_loop, host='%my_host_ip_address_here%:5000')
server.start()

ERR:

读取WSGI处理程序时出错:Traceback(最近一次调用最后一次):文件“C:\ Python34 \ lib \ site-packages \ bokeh \ server \ server.py”,第45行,在_create_hosts_whitelist int(parts [1 ])ValueError:带有基数10的int()的无效文字:''在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用最后一次):文件“C:\ WebsitesFlask \ bokehTest \ wfastcgi.py”,行711,在主env中,handler = read_wsgi_handler(response.physical_path)文件“C:\ WebsitesFlask \ bokehTest \ wfastcgi.py”,第568行,在read_wsgi_handler中返回env,get_wsgi_handler(handler_name)文件“C:\ WebsitesFlask \ bokehTest \ wfastcgi .py“,第537行,在get_wsgi_handler处理程序= 导入(module_name,fromlist = [name_list [0] [0]])文件”。\ app.py“,第41行,在server = Server中({'/':bokeh_app},io_loop = io_loop,host ='%my_host_ip_address_here%:5000')文件“C:\ Python34 \ lib \ site-packages \ bokeh \ server \ server.py”,第123行,在< strong> init tornado_kwargs ['hosts'] = _create_hosts _whitelist(kwargs.get('host'),self._port)文件“C:\ Python34 \ lib \ site-packages \ bokeh \ server \ server.py”,第47行,在_create_hosts_whitelist中引发ValueError(“主机中的无效端口”值:%s“%host”ValueError:主机值中的端口无效:: StdOut:StdErr:

1 个答案:

答案 0 :(得分:0)

首先,在下一个--host版本中不再需要0.12.5参数。对于试图在“生产”环境中部署Bokeh服务器应用程序的人来说,这可能是最令人困惑的绊脚石。您可以按照this issue on GitHub上的讨论了解更多详情。

查看Bokeh中的实际实现会产生您看到的错误,就是这样:

parts = host.split(':')
if len(parts) == 1:
    if parts[0] == "":
        raise ValueError("Empty host value")
    hosts.append(host+":80")
elif len(parts) == 2:
    try:
        int(parts[1])
    except ValueError:
        raise ValueError("Invalid port in host value: %s" % host)

您报告的异常表明int(parts[1])失败:

Traceback (most recent call last): 
File "C:\Python34\lib\site-packages\bokeh\server\server.py", line 45, 
in _create_hosts_whitelist int(parts[1]) 
ValueError: invalid literal for int() with base 10:

所以,你传递给hosts的字符串有一些不妥之处,导致冒号后的部分无法转换为int但是没有看到实际的字符串,它就是不可能多说。也许有一些编码问题需要以不同或更好的方式处理。如果你能提供一个重现问题的具体字符串示例,我可以仔细看看。