尽管有try / except子句,并且没有错误日志,但内部服务器仍然错误

时间:2018-12-17 12:44:58

标签: python flask

我有一个使用IIS在Windows Server 2012上运行的简单应用程序。它用于在下面运行R脚本(这是一个非常复杂的脚本,因此无法在Python中重写它)。这是代码:

try:
    output = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
except:
    return jsonify({'output': 'Error!', 'returncode': '0', 'error': 'Unknown Error'})
else:
    error = str(output.stderr)
return jsonify({'output': str(output.stdout), 'returncode': str(output.returncode), 'error': error})

它是由AJAX运行的,并且在大多数情况下运行良好,但有时会导致“内部服务器错误”。

现在有趣的部分。上述错误不会被except子句捕获,也不会记录在Flask error.log中,并且底层的R脚本会执行它打算做的所有事情。简而言之,一切都会按预期进行,但没有特殊原因会引发内部服务器错误。尽管一切正常,但用户仍然遇到错误,这非常令人讨厌。

我已经尝试过不使用try / except和“ except err err”,但是它们也不会记录任何错误。

这是设置error.log的方式。它适用于应用程序的其他部分,没有任何问题。

app = Flask(__name__, static_url_path="", static_folder="static")    
errHandler = logging.FileHandler('errors.log')
errHandler.setLevel(logging.ERROR)
app.logger.addHandler(errHandler)

有什么主意如何捕获此错误,以便尝试对其进行调试?

更新

我注意到大约1.5分钟后返回了内部服务器错误。当我将R脚本更改为简单的waits 10s命令时,它可以完美工作,因此似乎是超时问题。

我已将subprocessajax上的超时设置为180秒,但这没有帮助。我还有别的地方吗?

更新2

我已经从等式中取出了ajax,并使用标准超链接到具有子流程的页面。 1.5分钟后,它仍然显示内部服务器错误。我也将R脚本更改为等待2分钟,并且脚本本身完成时没有任何问题(出现错误后30秒)。

1 个答案:

答案 0 :(得分:0)

我正在寻找完全错误的地方。此问题是由IIS管理器中的FastCGI活动超时设置引起的。超时只有70秒,而parameter的处理时间要长得多。增加活动超时可以解决该问题。