gpt4 book ai didi

python - 自定义 flask 应用程序在本地主机上运行良好,但向外部访问者返回 500 响应

转载 作者:行者123 更新时间:2023-11-28 18:30:54 24 4
gpt4 key购买 nike

最新更新:问题确实与权限和用户组有关,今天我了解到为什么我们不简单地对所有内容使用 root。感谢Jakub P.提醒我查看 apache 错误日志并感谢 domoarrigato提供有用的见解和解决方案。


StackOverflow 怎么了。

我关注了 How To Deploy a Flask Application on an Ubuntu VPS DigitalOcean 提供的教程,并让我的应用程序在通过向我的公共(public)服务器 IP 发出 GET 请求从外部访问时成功打印出 Hello, I love Digital Ocean!

还好吧?不是真的。

之后,我编辑了教程脚本并编写了一个自定义的 Flask 应用程序,我在我的个人开发环境中测试了该脚本并且它运行没有问题,我还在 DigitalOcean 服务器上对其进行了测试,方法是将其部署在本地主机上并制作另一个GET 请求。

一切都按预期工作,直到我尝试从我的公共(public) DigitalOcean IP 访问它,现在突然出现一个 500 Internal Server Error

是什么导致了这个问题,在这种情况下正确的调试方法是什么?

我尝试了什么?

  • 设置 app.debug = True 会产生相同的 500 Internal Server Error 而没有调试报告。

  • 在我的台式电脑和 DigitalOcean 服务器的本地主机上运行应用程序没有出现错误,脚本按预期执行。

  • 教程代码运行良好,向 Digital Ocean 公共(public) IP 发出 GET 请求会返回预期的响应。

  • 我可以在教程应用程序和我自己的应用程序之间切换,并且清楚地看到我在我的自定义应用程序中遇到错误。但是,自定义应用程序在本地主机上运行时仍然没有问题。

我的代码

from flask import Flask, request, redirect
from netaddr import IPNetwork
import os
import time

app = Flask(__name__)
APP_ROOT = os.path.dirname(os.path.abspath(__file__))

# Custom directories
MODULES = os.path.join(APP_ROOT, 'modules')
LOG = os.path.join(APP_ROOT, 'log')


def check_blacklist(ip_adress):
ipv4 = [item.strip() for item in open(MODULES + '//ipv4.txt').readlines()]
ipv6 = [item.strip() for item in open(MODULES + '//ipv6.txt').readlines()]

for item in ipv4 + ipv6:
if ip_adress in IPNetwork(item):
return True

else:
pass

return False


@app.route('/')
def hello():
ip_adress = request.environ['REMOTE_ADDR']
log_file = open(LOG + '//captains_log.txt', 'a')

with log_file as f:

if check_blacklist(ip_adress):
f.write('[ {}: {} ][ FaceBook ] - {} .\n'
.format(time.strftime("%d/%m/%Y"), time.strftime("%H:%M:%S"), request.environ))
return 'Facebook'

else:
f.write('[ {}: {} ][ Normal User ] - {} .\n'
.format(time.strftime("%d/%m/%Y"), time.strftime("%H:%M:%S"), request.environ))
return 'Normal Users'


if __name__ == '__main__':
app.debug = True
app.run()

教程代码:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, I love Digital Ocean!"
if __name__ == "__main__":
app.run()

最佳答案

似乎下一行可能是个问题:

log_file    = open(LOG + '//captains_log.txt', 'a')

如果它寻找的路径是:'/var/www/flaskapp/flaskapp/log//captains_log.txt'

在那里抛出异常是有道理的。可能文件在不同的地方,在服务器上,或者需要删除 / - 确保 open 命令会找到正确的文件。

如果 captains_log.txt 在 flask app 目录之外,你可以将它复制进去并 chown。如果 txt 文件需要在目录之外,那么您必须将用户添加到适当的组,或者打开对实际目录的权限。

chown 命令应该是:

sudo chown www:www /var/www/flaskapp/flaskapp/log/captains_log.txt

运行起来可能很聪明:

sudo chown -r www:www /var/www

关于python - 自定义 flask 应用程序在本地主机上运行良好,但向外部访问者返回 500 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com