在Azure上发布Flask Web App

时间:2017-01-21 23:09:02

标签: python azure flask

我有尝试在天蓝色上发布的Flask网络应用。我在Web应用程序上部署了它,创建了新资源,下载了用户发布配置文件,并使用下载的文件从visual studio发布了它。一切都在localhost上顺利运行,但一旦发布即可获得错误:

  
  • IIS收到了请求;但是,内部错误   在处理请求期间发生。这个的根本原因   错误取决于哪个模块处理请求以及什么是   发生此错误时发生在工作进程中。
  •     
  • IIS无法访问该网站的web.config文件   或申请。如果设置了NTFS权限,则会发生这种情况   错误。
  • IIS无法处理配置   网站或应用程序。
  • 经过身份验证的用户没有   有权使用此DLL。
  • 请求映射到a   托管处理程序,但.NET可扩展性功能不是   安装。

我几乎不知道这意味着什么。这是我发布的第一个网络,所以我很新手。

我的项目有以下结构。 enter image description here

我的Views.py使用以下代码调用senna-win32.exe:

 senna_path = os.path.join('senna\\senna-win32.exe')
 p = subprocess.Popen(senna_path, stdout=subprocess.PIPE,stdin=subprocess.PIPE)
 grep_stdout = p.communicate(input=bytes(va, 'utf-8'))[0]
 inList = grep_stdout.decode()
 inList = list(inList.splitlines())

我的本​​地主机似乎没有任何问题/错误,但不确定是什么意思。

2 个答案:

答案 0 :(得分:2)

根据我的经验,有很多原因会导致像你这样的问题。

对于第一种情况,reqirements.txt文件中所需的某些Python包未直接安装在Azure WebApp上。对于这种情况,您需要按照troubleshooting的官方摘要来解决它。或者,您甚至可以尝试按照我的解决方案为其他SO线程Publishing MVC app that uses python script来解决它。

但是,我认为您的问题可能是由于代码中的senna_path不是Azure WebApp上的有效路径引起的。我试图创建一个简单的Python脚本,如下所示,使用Azure WebApp上的Kudu控制台测试代码,它可以通过命令python test.py > test.out.txt正常工作。

import os
from subprocess import Popen, PIPE

path = os.path.join('senna-win32.exe')
p = Popen(path, stdin=PIPE, stdout=PIPE)
grep_stdout = p.communicate(input="happy time".encode('utf-8'))[0]
inList = grep_stdout.decode()
inList = list(inList.splitlines())
print inList

所以我的建议是尝试使用绝对路径D:\home\site\wwwroot\FlaskWebProject1\senna\senna-win32.exe代替senna\senna-win32.exe来解决问题。

任何更新,请随时告诉我。

答案 1 :(得分:0)

我遇到了同样的问题,在我的情况下,问题是缺少stderr的重定向,就像我的代码一样,我只重定向stdout + stdin。

添加stderr=PIPE解决了我的问题。

process = Popen(exe_relative_path, stdin=PIPE, stdout=PIPE, stderr=PIPE)