首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ERR_TOO_MANY_REDIRECTS在一个瓶子应用程序中。在本地工作,但在服务器中不工作。

ERR_TOO_MANY_REDIRECTS在一个瓶子应用程序中。在本地工作,但在服务器中不工作。
EN

Stack Overflow用户
提问于 2021-06-12 13:12:15
回答 2查看 1.4K关注 0票数 1

本地中,我的应用程序工作正常,当我使用/editing_buddy时,它会正确地重定向我。问题是,当我将它上传到服务器时,它总是给我404 Error

如果我尝试使用@app.route装饰器,我会得到一个TOO MANY REDIRECTS error。如果这有帮助的话,我的服务器将由维基媒体在funpedia.toolforge.org中托管。这是一个带有kubernetes后端的webservice。

我的代码是这样的:

代码语言:javascript
运行
复制
app = flask.Flask(__name__)

if __name__ == '__main__':
    app.run_server(host='0.0.0.0', threaded=True, debug=True)


# Load configuration from YAML file
__dir__ = os.path.dirname(__file__)
app.config.update(
    yaml.safe_load(open(os.path.join(__dir__, 'config.yaml'))))

@app.route('/')
def index():

    return flask.redirect(flask.url_for('index'))

@app.route('/editing_buddy')
def buddy():

    return flask.redirect(flask.url_for('buddy'))

@app.errorhandler(404)
def handling_page_not_found(e):
    return "<h1>404</h1><p>The resource could not be found.</p>", 404

"/“和"/editing_buddy”的应用程序是具有相同url_base_pathname的Dash应用程序:

Buddy

代码语言:javascript
运行
复制
buddy_app = Dash(__name__, server=application, url_base_pathname="/editing_buddy/",
                             external_stylesheets=external_stylesheets)
buddy_app.config['suppress_callback_exceptions'] = True

Home

代码语言:javascript
运行
复制
 home_app = Dash(__name__, server=application, url_base_pathname="/", 
                           external_stylesheets=external_stylesheets)
 home_app.config['suppress_callback_exceptions'] = True



from view.home import *
from view.editing_buddy_app import *

在本地,我通过运行wsgi.py启动服务器。其中包含以下代码:

代码语言:javascript
运行
复制
from app import app as application

if __name__ == "__main__":
    application.run()

在服务器中,我只运行webservice restart,但是我有一个名为app.ini的.ini文件,其内容如下:

代码语言:javascript
运行
复制
[uwsgi]
module = wsgi
callable = application

我的文件夹结构是

PS:我也尝试过硬编码重定向,比如flask.redirect("/editing_buddy/")。甚至我也尝试过像flask.redirect("funpedia.toolforge.org/editing_buddy/")那样硬编码URL,或者找不到它,或者重定向太多。

你可以看到我的回购 这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-12 16:40:31

现在起作用了为什么?我一点线索都没有。我做了下一个:

  1. 我从app.ini目录中删除了app.py,并将其放在根目录中。
  2. home.py中,我将from app import app as application重命名为from app import app
  3. 消除不必要的@app.route的破折号应用程序,他们是不需要的,因为你已经有了url_base_pathname

在进行了一些测试之后,我发现解决方案是步骤2.,在home.py脚本中使用from app import app

但是,在editing_buddy_app.py中,我使用了from app import app as application 和it WORKS

当然,我在这里漏掉了什么,但我猜不出是什么。

票数 0
EN

Stack Overflow用户

发布于 2021-06-12 13:36:55

您实际上是在将您的方法重定向到完全相同的方法,您正在进行重定向。通过这样做,您将创建一个没完没了的循环,而TBH甚至会在本地抛出错误。

我建议您仔细阅读这个medium.com文章,以确保您使用应用工厂模式正确地设置了Dash和应用工厂模式

===================================================

编辑:

这是我链接的文章中的一个拷贝/粘贴,您可以看到,当Flask应用被实例化时,它还创建了Dash应用程序,使用Flask应用程序作为服务器.

dashboard.py

代码语言:javascript
运行
复制
def create_app():
    server = Flask(__name__)
    server.config.from_object(BaseConfig)

    register_dashapps(server)
# snipped some here

    return server


def register_dashapps(app):
    from app.dashapp1.layout import layout
    from app.dashapp1.callbacks import register_callbacks

    # Meta tags for viewport responsiveness
    meta_viewport = {"name": "viewport", "content": "width=device-width, initial-scale=1, shrink-to-fit=no"}

    dashapp1 = dash.Dash(__name__,
                         server=app,
                         url_base_pathname='/dashboard/',
                         assets_folder=get_root_path(__name__) + '/dashboard/assets/',
                         meta_tags=[meta_viewport])

    with app.app_context():
        dashapp1.title = 'Dashapp 1'
        dashapp1.layout = layout
        register_callbacks(dashapp1)

    _protect_dashviews(dashapp1)

===================================================

EDIT2:

感谢您添加了回购,这有助于了解发生了什么,我认为我已经掌握了您想要做的基础上的其余代码。我猜您希望在应用程序中添加身份验证逻辑,这样并不是每个人都可以访问相应的Dash应用程序的处理程序。

问题是,您正遇到第一条 i链接中描述的完全相同的问题之一,即身份验证。

如果要使用身份验证,则需要重构代码,类似于上述文章中讨论的内容。

在研究这个问题时,我确实遇到了一篇可能让您感兴趣的文章,因为它讨论了如何实现身份验证。这也是一篇更简单的文章,它基本上允许你在Dash应用程序中应用烧瓶的东西。找到它这里..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67949189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档