Azure Flask 部署 - WSGI 接口
Azure Flask Deployment - WSGI Interface
我目前正在阅读 Flask Web 开发,使用 Python 开发 Web 应用程序一书,目前在确定我应该将 WSGI 接口放置在何处以便将其部署到 Azure Web 时遇到一些问题服务。作为参考,我目前在第 7 章,我正在研究的这段代码的副本可以在 https://github.com/miguelgrinberg/flasky/tree/7a
找到
为了尝试找出问题所在,我在 Visual Studio 中使用 Flask 创建了一个测试 Azure 云服务,运行 在 Azure 模拟器中非常完美。以下代码是 app.py 文件的副本。
"""
This script runs the application using a development server.
It contains the definition of routes and views for the application.
"""
from flask import Flask
app = Flask(__name__)
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
这里的关键行是 wfastcgi 获取的 wsgi_app 属性的声明。但是,当我尝试将其插入以下代码(manage.py 以供参考)并使用测试项目设置
将其稍微更改为 运行 时
#!/usr/bin/env python
import os
from app import create_app, db
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)
@manager.command
def test():
"""Run the unit tests."""
import unittest
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
if __name__ == '__main__':
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
当我尝试在 Azure 模拟器中 运行 时收到以下错误。
AttributeError: 'module' object has no attribute 'wsgi_app'
我怀疑我没有将 wsgi_app 变量放在正确的位置,但我不知道应该把它放在哪里。
如有任何帮助,我们将不胜感激。
您是否考虑过使用网络应用程序启动 Flask 并运行?以下是有关如何在 Web 应用程序上部署 Flask 的综合指南:
https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-flask-app/
它会自动为您设置站点并处理 web.config 和快速的 cgi 脚本。
我用 Flask 构建了一个测试 Azure 云服务,试图重现你的问题,幸运的是,我找到了问题。
我把相关包复制到我的测试项目中,发现如果根目录下的入口文件名为app.py
,也会出现和你一样的错误。但我将文件重命名为 manage.py
项目工作正常。
据我了解,入口文件app.py和名为app的包可能会在映射时发生冲突。
经过一些麻烦的拍摄后,我找到了问题的解决方案,但遗憾的是无法准确找出问题所在。
基本上,我经历了在 VS2015 中从头开始重建我的测试项目的过程(Python -> Azure 云服务 -> Flask Web 角色),这次不知何故能够使用7a 测试项目运行在 Azure 模拟器中使用它,然后成功将其发布为 Azure Web 应用程序。
我认为我的问题可能是由以下问题之一引起的:
- requirements.txt 文件很可能不是最新的。请注意,当您 运行 Azure 模拟器时,它会自动检查 requirements.txt 文件和 updates/installs 您当前未在 python 环境中安装的任何库(没有提示).
- 我可能在 Flask 辅助角色项目的 bin 文件夹中没有 ConfigureCloudService.ps1 或 ps.cmd 文件。 (如果您 运行 遇到任何问题,也值得通读 Readme.mht 文件)
我也将 manage.py 文件的基础更改为:
if __name__ == '__main__':
app.run()
这可能也有帮助。
我希望这能帮助其他可能 运行 遇到类似问题的人。
我目前正在阅读 Flask Web 开发,使用 Python 开发 Web 应用程序一书,目前在确定我应该将 WSGI 接口放置在何处以便将其部署到 Azure Web 时遇到一些问题服务。作为参考,我目前在第 7 章,我正在研究的这段代码的副本可以在 https://github.com/miguelgrinberg/flasky/tree/7a
找到为了尝试找出问题所在,我在 Visual Studio 中使用 Flask 创建了一个测试 Azure 云服务,运行 在 Azure 模拟器中非常完美。以下代码是 app.py 文件的副本。
"""
This script runs the application using a development server.
It contains the definition of routes and views for the application.
"""
from flask import Flask
app = Flask(__name__)
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
@app.route('/')
def hello():
"""Renders a sample page."""
return "Hello World!"
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
这里的关键行是 wfastcgi 获取的 wsgi_app 属性的声明。但是,当我尝试将其插入以下代码(manage.py 以供参考)并使用测试项目设置
将其稍微更改为 运行 时#!/usr/bin/env python
import os
from app import create_app, db
from app.models import User, Role
from flask.ext.script import Manager, Shell
from flask.ext.migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)
@manager.command
def test():
"""Run the unit tests."""
import unittest
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
if __name__ == '__main__':
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.run(HOST, PORT)
当我尝试在 Azure 模拟器中 运行 时收到以下错误。
AttributeError: 'module' object has no attribute 'wsgi_app'
我怀疑我没有将 wsgi_app 变量放在正确的位置,但我不知道应该把它放在哪里。
如有任何帮助,我们将不胜感激。
您是否考虑过使用网络应用程序启动 Flask 并运行?以下是有关如何在 Web 应用程序上部署 Flask 的综合指南: https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-flask-app/
它会自动为您设置站点并处理 web.config 和快速的 cgi 脚本。
我用 Flask 构建了一个测试 Azure 云服务,试图重现你的问题,幸运的是,我找到了问题。
我把相关包复制到我的测试项目中,发现如果根目录下的入口文件名为app.py
,也会出现和你一样的错误。但我将文件重命名为 manage.py
项目工作正常。
据我了解,入口文件app.py和名为app的包可能会在映射时发生冲突。
经过一些麻烦的拍摄后,我找到了问题的解决方案,但遗憾的是无法准确找出问题所在。
基本上,我经历了在 VS2015 中从头开始重建我的测试项目的过程(Python -> Azure 云服务 -> Flask Web 角色),这次不知何故能够使用7a 测试项目运行在 Azure 模拟器中使用它,然后成功将其发布为 Azure Web 应用程序。
我认为我的问题可能是由以下问题之一引起的:
- requirements.txt 文件很可能不是最新的。请注意,当您 运行 Azure 模拟器时,它会自动检查 requirements.txt 文件和 updates/installs 您当前未在 python 环境中安装的任何库(没有提示).
- 我可能在 Flask 辅助角色项目的 bin 文件夹中没有 ConfigureCloudService.ps1 或 ps.cmd 文件。 (如果您 运行 遇到任何问题,也值得通读 Readme.mht 文件)
我也将 manage.py 文件的基础更改为:
if __name__ == '__main__': app.run()
这可能也有帮助。
我希望这能帮助其他可能 运行 遇到类似问题的人。