Apache:WSGI 不路由

问题描述 投票:0回答:1

我正在尝试将 WSGI 与我需要能够在 Apache 2 下发布到的 URL 一起使用(使用

flask
)。 我能够独立于 Apache (
.wsgi
) 运行我的
python cfg.wsgi
,并且它可以正确处理 GET 和 POST 请求(使用
curl
进行测试),但在 Apache 下运行时它无法运行:对
curl
的 GET 请求相关 URL (
/watchdog.cfg
) 返回“404 Not Found”(如果我删除映射 GET 的 WSGI工作得非常好,完全在 Apache 中,但是当然我没有得到我想要的 POST 功能)

Apache 正在加载

.wsgi
文件(其错误日志如此说明,并且
.wsgi
文件顶部的调试打印出现在调试日志中),因此 Python 路径和解释器可能是正确的;问题似乎是 Apache 没有调用
.wsgi
路由函数(即,当相关 URL (
application
) 为要求)。
我的 Apache 

/watchdog.cfg

文件是:

.conf

<VirtualHost *:80>
    DocumentRoot /home/http/
    WSGIScriptAlias /watchdog.cfg /home/http/cfg.wsgi
    <Directory /home/http>
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

返回“wsgi_module(共享)”,所以我相信Apache已经安装了WSGI模块。 文件

apache2ctl -M | grep wsgi
的权限为 0644,文件
watchdog.cfg
的权限为 0755。
我的

cfg.wsgi

文件是:

cfg.wsgi

这是在 Raspbian Linux 上。  关于为什么我的路由函数没有被 Apache 调用有什么建议吗?

apache post wsgi
1个回答
0
投票
from flask import Flask, request, send_file from os import path FILE_NAME = 'watchdog.cfg' application = Flask(__name__) @application.route('/' + FILE_NAME, methods=['GET', 'POST']) def cfg(): file_path = '/home/http/' + FILE_NAME; if request.method == 'POST': jsonString = request.json with open(file_path, 'w') as f: f.write(jsonString) return "File updated successfully.", 200 elif request.method == 'GET': if path.exists(file_path): return send_file(file_path, mimetype='application/json') else: return "File not found.", 404 if __name__ == '__main__': application.run(host='0.0.0.0', port=80)

的无 Flask 版本,它确实有效(相同的 Apache

cfg.wsgi
文件内容):
.conf

	
© www.soinside.com 2019 - 2024. All rights reserved.