J'ai une application Flask fonctionnant sous Apache en utilisant mod_wsgi. L'application doit effectuer une certaine initialisation, notamment en définissant des variables de niveau supérieur qui doivent être accessibles dans les gestionnaires de requêtes, avant de recevoir des demandes. À l'heure actuelle ce code d'initialisation est seulement des déclarations de haut niveau dans app.py
avant que les méthodes de traitement de la demande:Initialisation d'une application Flask fonctionnant avec Apache et mod_wsgi
from flask import Flask, Response, request
<other app imports>
APP = Flask(__name__)
# initialisation code
@APP.route(<URL for request #1>)
def request_handler_1():
# request handler code
@APP.route(<URL for request #2>)
def request_handler_2():
# request handler code
fichier wsgi de l'application ressemble à ceci:
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/myapp")
from myapp.app import APP as application
application.secret_key = <secret key>
J'ai remarqué que le code d'initialisation n'est pas appelé avant la réception de la première demande. Comment puis-je faire exécuter le code d'initialisation lorsque l'application est chargée par mod_wsgi, avant que toutes les demandes soient reçues?
Veuillez montrer un exemple de votre code d'installation. – MKesper
Il s'agit simplement de définir le codage par défaut, de définir les constantes nécessaires aux gestionnaires de requêtes dans 'app.py' et de configurer la journalisation. –
J'ai déplacé tout ce code d'initialisation de l'application vers le paquet init, et à partir des logs Apache je peux encore voir que le code wsgi de l'application est d'abord exécuté quand la première requête est reçue. Il doit sûrement y avoir un moyen de le faire quand l'application est chargée par mod_wsgi. –