【发布时间】:2022-10-17 07:03:43
【问题描述】:
我正在开发一个应用程序,开发设置非常简单。
我在本地运行它:
$ . .venv/bin/activate
(.venv) $
(.venv) $ python -m flask run
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:8080
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: -###-###
我已经在我的(ubuntu)笔记本电脑上配置了 apache2:
ProxyPass / http://127.0.0.1:8080
我的代码结构如下:
app.py
pages/scc_main/scc.html
...
代码有这个:
import re
import jinja2
from flask import Flask
from flask import request
import data
app = Flask(__name__)
env = jinja2.Environment(loader=jinja2.FileSystemLoader("pages"))
@app.route('/')
def hello_world():
return '<h2>Hello, World!</h2>'
@app.route('/contracts/scc')
@app.route('/contracts/scc/')
def contracts_main():
main = env.get_template('scc_main/scc.html')
context = data.build('scc_main')
return main.render(**context)
一切都很好。如:
$ curl 'http://localhost/'
<h2>Hello, World!</h2>$
但是当我部署时。哇。我将网站的根目录设置为指向该应用程序。这实际上是有效的。我可以点击https://opencalaccess.org/,它会获取我的静态内容。
我有:
import sys
import logging
logging.basicConfig(
level=logging.DEBUG,
filename='/var/www/<full-path>/logs/contracts_scc.log',
format='^(asctime)s %(message)s')
sys.path.insert(0, '/var/www/<full-path>')
sys.path.insert(0, '/var/www/<full-path>/.venv/lib/python3.8/site-packages')
https://opencalaccess.org/contracts/scc 有效。但只有在我将上面的环境调用更改为:
env = jinja2.Environment(loader=jinja2.FileSystemLoader("/var/www/full-path>/pages"))
现在,任何只是链接的链接都可以。但是任何查看 flask.request.path 的东西都会给我:
The browser (or proxy) sent a request that this server could not understand.
有没有搞错?设置开发环境非常简单。您需要做什么才能使其在部署中发挥作用?有什么建议么?
添加:
好吧,很明显是 WSGI 部分出现了问题。我的脚本没有收到请求结构,因此它无法读取任何参数。我的所有参数都在 URL 上,所以我的数据构建方法读取 request.path 以查看要执行的操作。
那么,从这里到哪里去。我们会看到。
【问题讨论】:
标签: python-3.x flask jinja2 mod-wsgi