I am currently running into an issue deploying a Flask app on Amazon’s EB2 service. The Flask app works locally. When it is deployed, however, it only works for the first person who clicks the link. After that it throws the following error:
Internal Server Error The server encountered an internal error and was
unable to complete your request. Either the server is overloaded or
there is an error in the application.
The error it is throwing out concerns the Flask session – it becomes empty after routing from one site to another. I also noticed that the
before_first_request function detailed below is ran only once, for the first user, and never again – which is even more bewildering.
Here’s the minimal example:
from flask import Flask, render_template, request, session, url_for application = Flask(__name__) application.secret_key = "mysecretkey" @application.before_first_request def before_first_request(): """ these commands are run before the first request""" # setup logging application.logger.setLevel(logging.INFO) application.logger.info('starting up Flask') # clear session session.clear() # load in PID session['pid'] = 123 # add parameters to the session params = dict() params['parameter'] = 0 session['params'] = params application.logger.info(session) # it is printing the session as expected return 'OK' @application.route('/') def main(): """ landing page """ application.logger.info(session) # empty application.logger.info(application.secret_key) # as expected params, results = session.pop('params'), session.pop('results') # throws out the error return render_template('empty_template.jinja', args = session)
I am wondering if anyone might know what is going on how to resolve the issue?
I managed to solve it.
The error was that
@before_first_request wrapper actually only ran once before first request ever made to the app. Hence, the session was actually only created and populated once.
I fixed that error by adding the call to
before_first_request function at the top of the
Answered By – Jules