【问题标题】:Azure web app crashes when initializing mongo DB client初始化 mongo DB 客户端时 Azure Web 应用程序崩溃
【发布时间】:2018-02-20 18:08:23
【问题描述】:

我已经使用 MongoDB 驱动程序创建了 Cosmos DB 帐户,并希望从烧瓶服务器访问它。这是我正在尝试的最简单的示例:

from flask import Flask
from pymongo import MongoClient


url = 'monbodb://<my_db_name>.documents.azure.com:10255/?ssl=true
username = '<my_db_name>'
password = '<my_password>'
client = MongoClient(url, username=username, password=password)
app = Flask(__name__)


@app.route('/ping', methods=['GET'])
def ping():
    return 'pong!'


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

我用 git 部署它,最后它说部署成功。但真正的应用程序已经崩溃,因为网页无法访问,说“页面无法显示,因为发生了内部服务器错误。”。我想问题出在 SSL 上,因为删除 '/?ssl=true' 确实允许访问应用程序网页,但这种情况下数据库无法访问!有什么问题,如何解决?

【问题讨论】:

    标签: mongodb azure ssl web-applications azure-web-app-service


    【解决方案1】:

    我尝试在我的 azure flask web 应用程序中访问我的mongo db,它对我来说效果很好。你可以参考我的工作步骤和代码。

    view.py

    from datetime import datetime
    from flask import render_template
    from jaygongflask import app
    import pymongo
    
    @app.route('/mongo')
    def mongo():
        uri = "mongodb://<account name>:<your account key>@<account name>.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"
        client = pymongo.MongoClient(uri)
        db = client['db']
        coll = db['coll']
        doc= coll.find_one()
        return render_template(
            'mongo.html',
            title='Mongo',
            message='Mongo query result.',
            queryResult = doc
        )
    

    发布您的烧瓶项目并添加web.config

    web.config:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <add key="WSGI_HANDLER" value="<Your Project Name>.app"/>
        <add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
        <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
      </appSettings>
      <system.webServer>
        <handlers>
          <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python361x64\python.exe|D:\home\Python361x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
        </handlers>
      </system.webServer>
    </configuration>
    

    切换到 Kudu CMD 和命令 cd Python361x64touch get-pip.py 并通过编辑按钮将 url https://bootstrap.pypa.io/get-pip.py 的内容复制到 get-pip.py 中,然后运行 ​​python get-pip.py 以安装 pip 工具。

    在这里,我使用 python361x64 扩展。所以我在 KUDU 中运行命令python -m pip install pyodbc

    获取查询结果

    访问网址http://***.azurewebsites.net/mongo

    更多部署细节,请参考这个tutorial

    希望对你有帮助。

    【讨论】:

    • 你好,杰。感谢您的重播,我正在尝试您的解决方案。您能告诉我应该编辑哪个 *.config 文件吗?目前我看到的可能性很少:1)“/d/home/site/repository”中的 web.2.7.config,2)“/d/home/wwwroot”中的 web.2.7.config 和 3)“/”中的 web.config d/home/site/wwwroot”。
    • @RailSuleymanov 您需要编辑项目中保留的那个(可能是您提到的 No.3 /d/home/site/wwwroot)。请看我的附加截图。
    • 显然我们在不同的时区,因为我还没有机会检查。我一有空就让你试试。但是在我昨天回复的时候,我无法创建文件(触摸 get-pip.py),也无法在 Kudu CMD 中安装包,所以我想这将是一个挑战......
    • @RailSuleymanov 没关系。您可以参考我之前案例中的详细信息:stackoverflow.com/questions/47155223/…。有任何问题或您坚持一步,请告诉我。
    • @RailSuleymanov 不管怎样,你可以参考我之前回答的案例,相信你能搞定! stackoverflow.com/search?q=user%3A8198946+touch+get-pip.py
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2012-10-20
    相关资源
    最近更新 更多