Python 创建简单的烧瓶错误应用程序以记录异常
我已经上传了一些代码到服务器上。代码在本地运行,但当我将其上载到服务器时,它会给我一个内部服务器错误。该网站正在使用wsgi运行,代码为:Python 创建简单的烧瓶错误应用程序以记录异常,python,flask,logging,Python,Flask,Logging,我已经上传了一些代码到服务器上。代码在本地运行,但当我将其上载到服务器时,它会给我一个内部服务器错误。该网站正在使用wsgi运行,代码为: try: from decksite import main, APP as application except Exception as e: from shared import repo repo.create_issue('Error starting website', except
try:
from decksite import main, APP as application
except Exception as e:
from shared import repo
repo.create_issue('Error starting website', exception=e)
if __name__ == '__main__':
print('Running manually. Is something wrong?')
application.run(host='0.0.0.0', debug=False)
因此,尝试和尝试都失败了。我想添加第二个异常,并将其全部传递给一个简单的flask应用程序,该应用程序将两个异常输出到浏览器并将它们记录到一个文件中。问题是,我不知道如何将异常传递给error_app flask app,它在我设置日志配置的行中中断。这就是我所做的。我只得到了NoneType:None,而不是完整的异常
import os, sys
sys.path.append("/home/myuser/public_html/flask");
try:
from decksite import main, APP as application
except Exception as error:
#from shared import repo
#repo.create_issue('Error starting decksite', exception=error)
#sys.path.insert(0, os.path.dirname(__file__))
#from error_app import app as application
# This is the code that goes into the error flask application
import logging
import traceback
from flask import Flask, __version__
app = Flask(__name__)
application = app
@app.route("/")
def hello():
return traceback.format_exc()
# The next line gives Internal Server Error
logging.basicConfig(filename='example.log', level=logging.DEBUG)
logging.exception(error)
return traceback.format_exc()
if __name__ == '__main__':
print('Running manually. Is something wrong?')
application.run(host='0.0.0.0', debug=False)
我在服务器中没有sudo,也不能ssh到它,所以除非我能够记录错误,否则我将无法修复任何东西
编辑:我几乎得到了我想要的:
创建一个自定义500处理程序并打印出trackback
import traceback
@app.errorhandler(500)
def internal_server_error(e):
return render_template('500_error.html', traceback=traceback.format_exc())
让您的“500_error.html”模板显示回溯信息。您提到的500内部服务器错误即将出现。在您的本地服务器上一切正常,但在服务器上失败。由于您没有ssh访问权限,因此可能很难进行调试。如果您使用Docker或Kubernetes之类的工具来构建和部署,它可能会很有用。我可以向您推荐一些调试方法。代码不会尝试,除非失败了,可能的原因是服务器本身没有启动,因为缺少一些要求,比如导入,或者它可能是任何东西。 调试步骤 创建虚拟环境并在其中重新安装与服务器类似的要求。这将帮助您确定是否缺少需求。 如果您认为环境不是生产环境,并且您正在服务器中测试应用程序,则将debug=True。它将在前端显示一个错误。这绝对不是推荐的方法。我的建议是,因为您没有ssh访问权限。 如果可能的话,创建一个简单的路由,比如说/hello,然后返回hello,并检查它是否返回了正确的结果。这将让您知道服务器是否正在启动。即使这样,也不建议用于生产。 您还可以在请求前和请求后检查flask应用程序。这可能也很有用
希望第一步调试将对您有很大帮助,您可能不需要进入第2步和第3步。我给你的是最坏情况的场景,我认为我应该避免使用任何模板,以防模板目录所在的模块没有被导入。你可以使用或只是将其作为json返回。除了前面的错误,我还得到了,尝试使用ErrorDocument处理请求时遇到500内部服务器错误。您的生产环境似乎与您的开发/测试环境有很大不同。我会先设法解决这个问题。在这一过程中,这500个错误可能会变得明显。