【问题标题】:paths for deploying flask/wsgi differ from development部署flask/wsgi的路径与开发不同
【发布时间】: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


    【解决方案1】:

    我不再能够重现这一点。

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多