如果我尝试在本地运行该应用程序,它工作良好,反应良好。有人知道会出什么问题吗?
在浏览器控制台中发现的错误是:
网关超时
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;
}
}
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))
[uwsgi]
module = wsgi
master = true
processes = 5
socket = app.sock
chmod-socket = 660
vacuum = true
die-on-term = true
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
我已经按照下面的教程在nginx上运行flask应用程序
这可能是Fabric任务的问题,而不是烧瓶的问题。您是否尝试过将Fabric从应用程序中隔离/移除,只是为了故障排除的目的?您可以尝试为resp
插入一个值,而不是在函数中实际执行run
/sudo
命令。我敢打赌,如果你这样做了,应用程序就会工作得很好。
这意味着Fabric在执行该命令时遇到了问题。首先要做的是通过在生产服务器上模拟一个示例Fabfile来验证这一点,该示例使用您在某个请求中期望的信息,然后使用fab-f
运行该示例Fabfile。
还值得注意的是,将与设置一起使用(warn_only=true):
可能会导致错误消息的抑制。我认为您应该删除它,因为您正处于故障排除方案中。来自关于管理输出的文档:
警告:警告消息。当预期给定操作失败时,例如当使用grep测试文件中文本的存在时,这些操作通常被关闭。如果将env.warn_only
设置为True,这将导致远程程序失败时出现完全静默的警告。与中止一样,此设置不控制实际的警告行为,只控制警告消息是打印还是隐藏。
第三个建议是,通过使用show('debug')
上下文管理器以及启用Paramiko的日志记录,可以从Fabric中获取更多信息:
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/troleshooting.html。(1.6是一个较旧/过时的版本,但这些概念仍然适用。)
我们部署了一个Express web API,它获得了相当大的但相对较小的流量(平均每秒约10个请求),这些流量运行在通过Nginx代理的EC2 ubuntu服务器上。每隔一段时间,一个请求就会挂起,如果客户端等待的时间足够长,就会将包含以下内容的行输出到NGINX错误日志中: 我已经试过这里建议的解决办法,但似乎没有效果。这只发生在我们的知识大约1-3次每分钟,但我只是离开这些日志。如果客户机在
我的应用程序有以下堆栈: Nginx(1.4.6) UWSGI(1.9.17.1-Debian(64bit)) 烧瓶 Python 3.4 NGINX重启后的问题在一段时间内(几分钟)都能正常工作。在此期间之后,我收到一个“504网关超时”错误。 NGINX日志: *13从上游读取响应标头时上游超时(110:连接超时),客户端:86.123.39.44,服务器:app.fc.com,请求:“get
null 我们得出的结论是,客户端可以连接到Nginx,但是Nginx在将请求重定向到FPM(可以通过端口7777访问)时没有收到响应,并显示超时错误。我们一直致力于解决Nginx和FPM之间的通信问题,但几个小时后,我们还没有找到解决方案。 注意:这个问题在我们设置的四个虚拟机中重复出现。 Nginx错误日志(注意:主机名和ip已被取消) 文件:/etc/nginx/fastcgi_params
我有Puma运行作为上游应用服务器和Riak作为我的后台数据库集群。当我发送一个请求,为大约25K用户映射-减少一个数据块,并将其从Riak返回到应用程序时,我在Nginx日志中得到一个错误: Nginx有一系列超时指令。我不知道我是不是漏掉了什么重要的东西。如有任何帮助将不胜感激....