1

我已经用 python 和 wfastcgi.py 配置了 IIS,主要是让它工作。尝试使用简单的东西时,它会返回预期的内容。

我现在的问题是使用属性路由在 IIS 下获取烧瓶和绘图/破折号。

我的 web.config 如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python36\python.exe|C:\Python36\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>

  <appSettings>
    <!-- Required settings -->
    <add key="WSGI_HANDLER" value="index.wsgi_app" />
    <add key="PYTHONPATH" value="C:/inetpub/wwwroot/python/venv/Scripts/python36.zip;C:/inetpub/wwwroot/python/venv/DLLs;C:/inetpub/wwwroot/python/venv/lib;C:/inetpub/wwwroot/python/venv/Scripts;c:/python36/Lib', 'c:/python36/DLLs;C:/inetpub/wwwroot/python/venv;C:/inetpub/wwwroot/python/venv/lib/site-packages" />

    <!-- Optional settings -->
    <add key="WSGI_LOG" value="C:\temp\my_app.log" />
    <add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
    <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="__instrumentation_key__" />
    <add key="WSGI_PTVSD_SECRET" value="__secret_code__" />
    <add key="WSGI_PTVSD_ADDRESS" value="ipaddress:port" />
  </appSettings>
</configuration>

我创建了一个 index.py 文件,当我使用

from flask import Flask
from SimpleDash1 import app as sd1
from WebAppExampleA import app as waea

app = Flask(__name__)

@app.route("/")
def hello():
    response = ["Hello, world!\n"]
    return (line.encode("utf-8") for line in response)

def wsgi_app(environ,start_response):
    start_response('200 OK', [('Content-type', 'text/html'), ('Content-encoding', 'utf-8')])
    return hello()

if __name__ == "__main__":
    app.run()

它工作正常,但它并不能完全满足我的情节应用程序。为了尝试加载我的 plotly 应用程序,我使用了这个:

from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html

from app import app
from apps import web_example_a


app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content')
])


@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/apps/web_example_a':
         return web_example_a.layout
    #elif pathname == '/apps/app2':
    #     return app2.layout
    else:
        return '404'

if __name__ == '__main__':
    app.run_server(debug=True)

但是现在我很困惑我需要在 web.config 中将哪个入口点配置为我的 WSGI_HANDLER。如果我尝试将 WSGI_HANDLER 更改为“index.display_page”,我会收到一条错误消息:

发生了错误:

回溯(最后一次调用):文件“C:\Python36\Scripts\wfastcgi.py”,第 849 行,主要用于部分结果:文件“C:\python36\lib\site-packages\applicationinsights\requests\WSGIApplication .py”,第 70 行,调用 self._wsgi_application(environ, status_interceptor):文件“C:\python36\lib\site-packages\dash\dash.py”,第 498 行,在 add_context output_value = func( *args, **kwargs) TypeError: display_page() 接受 1 个位置参数,但给出了 2 个

标准输出:

标准错误:C:\python36\lib\site-packages\plotly\tools.py:103:用户警告:

看起来您对“主”(“~”)目录或我们的“~/.plotly”目录没有“读写”权限。这意味着 plotly 的 python api 无法设置本地配置文件。不过没问题!您只需使用“plotly.plotly.sign_in()”登录。寻求帮助:“帮助(plotly.plotly.sign_in)”。问题?访问 https://support.plot.ly

4

1 回答 1

1

Dash 应用程序的 WSGI 入口点是附加到 Dash 实例的 Flask 实例。这意味着您要将 WSGI 处理程序指向app.serverappDash 实例在哪里)。

applicationWSGI 服务器通常在将模块作为入口点传递时查找属性。因此,通常要做的事情是创建一个入口点文件wsgi.py,在您的情况下,该文件将简单地包含以下内容:

from index import app

application = app.server
于 2018-01-17T05:26:41.740 回答