我有一个使用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命令时,它可以完美工作,因此似乎是超时问题。
我已将subprocess
和ajax
上的超时设置为180秒,但这没有帮助。我还有别的地方吗?
更新2
我已经从等式中取出了ajax,并使用标准超链接到具有子流程的页面。 1.5分钟后,它仍然显示内部服务器错误。我也将R脚本更改为等待2分钟,并且脚本本身完成时没有任何问题(出现错误后30秒)。
答案 0 :(得分:0)
我正在寻找完全错误的地方。此问题是由IIS管理器中的FastCGI活动超时设置引起的。超时只有70秒,而parameter
的处理时间要长得多。增加活动超时可以解决该问题。