In local my Flask application works fine, and when I use /editing_buddy it redirects me correctly.
The thing is, when I upload it to the server, it always gives me 404 Error.
If I try to use @app.route decorator, I get a TOO MANY REDIRECTS error.
My server is hosted by Wikimedia in funpedia.toolforge.org if that helps. It’s a webservice with kubernetes backend.
My code is like this:
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
The apps for the “/” and “/editing_buddy” are Dash applications with the same url_base_pathname:
Buddy
buddy_app = Dash(__name__, server=application, url_base_pathname="/editing_buddy/",
external_stylesheets=external_stylesheets)
buddy_app.config['suppress_callback_exceptions'] = True
Home
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 *
Locally, I start the server by running wsgi.py. Which contains the code:
from app import app as application
if __name__ == "__main__":
application.run()
In the server I simply run webservice restart, but I have a .ini file called app.ini with content:
[uwsgi] module = wsgi callable = application
PS: I’ve also tried hardcoding the redirects like flask.redirect("/editing_buddy/"). Even i’ve tried to hardcode the URL like flask.redirect("funpedia.toolforge.org/editing_buddy/") and either doesn’t find it or Too many redirects.
You can see my repo HERE
Advertisement
Answer
Now it works, why? I don’t have any clue. I did the next:
- I eliminated the
app.inifrom the directory of theapp.pyand put it on the root directory. - In
home.py, I renamedfrom app import app as applicationto justfrom app import app. - Eliminated the unnecessary
@app.routefor the dash apps, they are not needed because you already have theurl_base_pathname.
After doing some testing, I found that the solution is the step 2. By using from app import app in the home.py script.
HOWEVER, in the editing_buddy_app.py, I have it with from app import app as application AND IT WORKS
Definitely, I’m missing something here, but I’m unable to guess what.
