tldr; 正在寻找一种方法来为在Gunicorn后面运行的应用中的所有路由添加前缀,而不需要在@route(PREFIX + '/')
等中使用反向代理/蓝图/重复前缀
使用Flask在Docker容器中运行创建一些Python服务 目前,不是使用Nginx / Apache进行反向代理。
在下面运行烧瓶时有类似的东西
- (例如% python app.py
以[{1}})
localhost:5000/a/b/some-route
在Gunicorn后面跑步时,不确定如何达到相同的效果
(真的很想在没有为主应用程序制作蓝图的情况下这样做。还要尽量避免在每个base_path = "/a/b"
app = DispatcherMiddleware(_root_app, {base_path: self})
run_simple(host, port, app, **options)
中使用相同的前缀
这样做的原因
使用添加了一些路径的扩展以及蓝图。希望将app路由和扩展/蓝图路由都加上前缀。
This question专门问Flask,我可以使用
@route(PREFIX + '')
方法开始工作。
我的问题是如何在Gunicorn背后运行时(前面没有Nginx或Apache,只有Gunicorn)
目前使用Flask 的子类(需要做一些自定义的日志记录废话。)
覆盖DispatcherMiddleware
有效。
add_url_rule
这也适用于我们的扩展程序
答案 0 :(得分:2)
如果您正在进行应用合成,那么您可以使用您引用的DispatcherMiddleware
trick。但是,听起来您正在尝试使用单个服务进行子路径安装,但不能提供任何超出"更高级别的服务。路径。
有几种不同的方法可以做到这一点。
将Flask.url_map._rules
替换为werkzeug.routing.Submount
规则工厂:
from werkzeug.routing import SubPath
app = Flask(__name__)
# register blueprints and extensions
# load config, etc.
app.url_map._rules = SubPath(app.config['APPLICATION_ROOT'], app.url_map._rules)
from werkzeug.routing import Rule
app.url_rule_class = lambda path, **options: Rule(PREFIX + path, **options)
按照您在问题中的建议替换add_url_rule
。
答案 1 :(得分:0)
您可以为特定蓝图的所有路线添加前缀
from flask import Blueprint
my_blueprint = Blueprint('my_blueprint_name', __name__, url_prefix='/my_prefix')
然后为你的所有蓝图路线简单地放
@my_blueprint.route('my_route')
在函数定义及其路由之前将是url_prefix + my_route
您可能会发现此链接有用http://flask.pocoo.org/docs/0.10/patterns/urlprocessors/
答案 2 :(得分:0)
尝试
app = dash.Dash(
__name__,
server=server,
routes_pathname_prefix='/dash/'
)