gpt4 book ai didi

python - 在 nginx 上使用 Fabric 的 Python Flask Web 应用程序中出现上游超时错误

转载 作者:行者123 更新时间:2023-12-02 03:09:12 25 4
gpt4 key购买 nike

我的 Python Flask Web 应用程序托管在 nginx 上。尝试执行请求时,它在 nginx 错误日志中显示超时错误,如下所示:

[error] 2084#0: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.2.224, server: 192.168.2.131, request: "POST /execute HTTP/1.1", upstream: "uwsgi://unix:/hom
e/jay/PythonFlaskApp/app.sock", host: "192.168.2.131:9000", referrer: "http://192.168.2.131:9000/"

如果我尝试在本地运行该应用程序,它工作正常并且响应良好。任何人都知道可能出了什么问题吗?

在浏览器控制台中发现的错误是:

Gateway Time-out

这是 nginx 配置文件:

server {
listen 9000;
server_name 192.168.2.131;

location / {
include uwsgi_params;
proxy_read_timeout 300;
uwsgi_pass unix:/home/jay/PythonFlaskApp/app.sock;
}
}

这是Python Fabric我试图执行的代码。我不确定这是否导致问题,但这里的任何 waz 都是代码:

from fabric.api import *

@application.route("/execute",methods=['POST'])
def execute():
try:
machineInfo = request.json['info']
ip = machineInfo['ip']
username = machineInfo['username']
password = machineInfo['password']
command = machineInfo['command']
isRoot = machineInfo['isRoot']

env.host_string = username + '@' + ip
env.password = password
resp = ''
with settings(warn_only=True):
if isRoot:
resp = sudo(command)
else:
resp = run(command)

return jsonify(status='OK',message=resp)
except Exception, e:
print 'Error is ' + str(e)
return jsonify(status='ERROR',message=str(e))

我有一个用于 Web 应用程序的 uWSGi 配置文件,并使用 upstart 脚本启动它。这是 uwSGiconf 文件:

[uwsgi]
module = wsgi

master = true
processes = 5

socket = app.sock
chmod-socket = 660
vacuum = true

die-on-term = true

这是 Upstart 脚本

description "uWSGI server instance configured to serve Python Flask App"

start on runlevel [2345]
stop on runlevel [!2345]

setuid jay
setgid www-data

chdir /home/jay/PythonFlaskApp
exec uwsgi --ini app.ini

我已按照 running flask app on nginx 上的以下教程进行操作

最佳答案

这可能是 Fabric 任务的问题,而不是 Flask 的问题。您是否尝试过从应用程序中隔离/删除 Fabric,只是为了进行故障排除?您可以尝试删除 resp 的值,而不是实际执行 run/sudo您的函数中的命令。我敢打赌,如果您这样做,该应用程序就会运行得很好。

因此,这意味着 Fabric 执行相关命令时遇到问题。您应该做的第一件事是通过使用您在一个请求中期望的信息在生产服务器上模拟示例 Fabfile 来验证这一点,然后使用 fab -f <mock_fabfile.py> 运行它。 .

还值得注意的是,使用 with settings(warn_only=True):可能会导致错误消息被抑制。我认为您应该删除它,因为您正处于故障排除场景中。来自 the docs on Managing Output :

warnings: Warning messages. These are often turned off when one expects a given operation to fail, such as when using grep to test existence of text in a file. If paired with setting env.warn_only to True, this can result in fully silent warnings when remote programs fail. As with aborts, this setting does not control actual warning behavior, only whether warning messages are printed or hidden.

第三个建议是,您可以使用 the show('debug') context manager 从 Fabric 获取更多信息。 ,以及enabling Paramiko's logging :

from fabric.api import env
from fabric.context_managers import show

# You can also enable Paramiko's logging like so:
import logging
logging.basicConfig(level=logging.DEBUG)

def my_task():
with show('debug'):
run('my command...')

Fabric 文档提供了一些用于故障排除的其他建议:http://docs.fabfile.org/en/1.6/troubleshooting.html 。 (1.6 是较旧/过时的版本,但概念仍然适用。)

关于python - 在 nginx 上使用 Fabric 的 Python Flask Web 应用程序中出现上游超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37962569/

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