问题描述
我已经实现了Display the contents of a log file as it is updated中提出的解决方案。
当我在localhost:8080上运行我的Flask应用程序时,此解决方案有效。意思是,当我运行waitress-serve --call 'server:create_app'
或flask run
并在浏览器中导航到API端点时,日志文件将被传输。
当我尝试在Nginx反向代理后面的VM上的生产环境中运行此命令时,日志不会流式传输。显示的唯一文本是我在layout.html
中定义的HTML标头。每当我CTRL + C Flask服务器时,最终日志中的10行就会显示在Web浏览器上。
以下是我的Nginx配置。值得注意的是我的应用程序不是从域根目录运行的。
nginx.conf:
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
location /githubapp/ {
proxy_pass http://127.0.0.1:8080/$request_uri;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Forwarded-Prefix /githubapp;
}
}
flaskr/__init__.py:
from flask import Flask
def create_app(config=os.environ.get('FLASK_ENV','default')):
app = Flask(__name__,instance_relative_config=True)
from . import routes
app.register_blueprint(routes.bp,url_prefix='/githubapp')
return app
flaskr/routes.py
@bp.route('/logs/progressive',methods=['GET'])
def realtime_log():
return render_template('stream.html')
@bp.route('/logs/stream',methods=['GET'])
def stream():
def generate():
with sp.Popen(['tail','-F','celery.log'],stdout=sp.PIPE,stderr=sp.PIPE) as proc:
while True:
yield proc.stdout.readline()
sleep(1)
return app.response_class(generate(),mimetype='text/plain')
flaskr/templates/stream.html
{% extends "layout.html" %}
{% block content %}
<pre id="output"></pre>
<script>
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET','{{ url_for('routes.stream') }}');
xhr.send();
setInterval(function() {
output.textContent = xhr.responseText;
},1000);
</script>
{% endblock %}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)