在本地中,我的应用程序工作正常,当我使用/editing_buddy时,它会正确地重定向我。问题是,当我将它上传到服务器时,它总是给我404 Error。
如果我尝试使用@app.route装饰器,我会得到一个TOO MANY REDIRECTS error。如果这有帮助的话,我的服务器将由维基媒体在funpedia.toolforge.org中托管。这是一个带有kubernetes后端的webservice。
我的代码是这样的:
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
buddy_app = Dash(__name__, server=application, url_base_pathname="/editing_buddy/",
external_stylesheets=external_stylesheets)
buddy_app.config['suppress_callback_exceptions'] = TrueHome
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启动服务器。其中包含以下代码:
from app import app as application
if __name__ == "__main__":
application.run()在服务器中,我只运行webservice restart,但是我有一个名为app.ini的.ini文件,其内容如下:
[uwsgi]
module = wsgi
callable = application我的文件夹结构是

PS:我也尝试过硬编码重定向,比如flask.redirect("/editing_buddy/")。甚至我也尝试过像flask.redirect("funpedia.toolforge.org/editing_buddy/")那样硬编码URL,或者找不到它,或者重定向太多。
你可以看到我的回购 这里
发布于 2021-06-12 16:40:31
现在起作用了为什么?我一点线索都没有。我做了下一个:
app.ini目录中删除了app.py,并将其放在根目录中。home.py中,我将from app import app as application重命名为from app import app。@app.route的破折号应用程序,他们是不需要的,因为你已经有了url_base_pathname。在进行了一些测试之后,我发现解决方案是步骤2.,在home.py脚本中使用from app import app。
但是,在editing_buddy_app.py中,我使用了from app import app as application 和it WORKS
当然,我在这里漏掉了什么,但我猜不出是什么。
发布于 2021-06-12 13:36:55
您实际上是在将您的方法重定向到完全相同的方法,您正在进行重定向。通过这样做,您将创建一个没完没了的循环,而TBH甚至会在本地抛出错误。
我建议您仔细阅读这个medium.com文章,以确保您使用应用工厂模式正确地设置了Dash和应用工厂模式。
===================================================
编辑:
这是我链接的文章中的一个拷贝/粘贴,您可以看到,当Flask应用被实例化时,它还创建了Dash应用程序,使用Flask应用程序作为服务器.
dashboard.py
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应用程序中应用烧瓶的东西。找到它这里..。
https://stackoverflow.com/questions/67949189
复制相似问题