【问题标题】:Bokeh Server on IIS SetupIIS 设置上的散景服务器
【发布时间】:2017-03-02 11:51:16
【问题描述】:

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

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

当我在本地启动脚本时,这很简单。但我似乎无法通过 IIS 正确设置它。我相信复杂性源于这样一个事实,即我用来在 IIS 上部署的 wfastcgi.py 模块如果没有某种类似于 hack 的工作就无法轻松实现多线程。

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

Run Flask as threaded on IIS 7

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

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()

错误:

读取 WSGI 处理程序时发生错误:Traceback(最近一次调用最后一次):文件“C:\Python34\lib\site-packages\bokeh\server\server.py”,第 45 行,在 _create_hosts_whitelist int(parts[1 ]) ValueError: invalid literal for int() with base 10: '' 在处理上述异常期间,发生另一个异常: Traceback(最近一次调用最后一次):文件“C:\WebsitesFlask\bokehTest\wfastcgi.py”,行711,在主环境中,handler = read_wsgi_handler(response.physical_path) 文件“C:\WebsitesFlask\bokehTest\wfastcgi.py”,第 568 行,在 read_wsgi_handler 返回环境中,get_wsgi_handler(handler_name) 文件“C:\WebsitesFlask\bokehTest\wfastcgi .py”,第 537 行,在 get_wsgi_handler handler = import(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 行,在 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 raise ValueError("Invalid port in host value: %s" % host) ValueError: Invalid port in host value: : StdOut: StdErr:

【问题讨论】:

    标签: python iis deployment server bokeh


    【解决方案1】:

    首先,在下一个0.12.5 版本中应该不再需要--host 参数。对于试图在“生产”环境中部署 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 中转换为但没有看到实际的字符串,就不可能说太多更多的。也许有一些编码问题需要以不同方式或更好地处理。如果您可以提供一个重现该问题的具体字符串示例,我可以仔细看看。

    【讨论】:

    • 感谢您的回复。至少,这有助于确定究竟是导致错误的原因。我还没有弄清楚如何通过 IIS 成功启动 Bokeh 服务器应用程序,也找不到任何成功执行此操作的人的参考资料并解释如何操作。但是,我确实设法解决了这个问题并在静态 HTML 文件中使用 JS 回调实现了动态图形:bokeh.pydata.org/en/latest/docs/user_guide/interaction/…
    猜你喜欢
    • 2023-04-02
    • 2018-04-12
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多