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



我有一个使用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 Exception as 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脚本更改为简单的等待10s命令时,它工作得很完美,所以这似乎是一个超时问题。

我在subprocessajax上将超时设置为180秒,但没有帮助。还有其他地方我应该去看看吗?

更新2

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

我找错地方了。此问题是由IIS管理器中的FastCGI活动超时设置引起的。超时时间只有70秒,而subprocess的处理时间要长得多。增加"活动超时"解决了此问题。

最新更新