Tengo una aplicación de flask grande construida dentro de un paquete llamado “MyApp” (exactamente como se muestra aquí: http://flask.pocoo.org/docs/0.12/patterns/packages/ )
De acuerdo con la documentación de Flask, el modo de depuración debe habilitar las siguientes características:
Al principio ejecuté mi aplicación de matraz con el siguiente comando y todo funcionó bien:
export FLASK_APP=MyApp export FLASK_DEBUG=1 flask run
Luego leí la forma correcta de configurar un sistema de configuración (incluido el modo de depuración). Así que creé el siguiente archivo config.py:
class Config(object): DEBUG = False ... class ProductionConfig(Config): ... class DevelopmentConfig(Config): DEVELOPMENT = True DEBUG = True ... CONFIGS = { "development": DevelopmentConfig, "production": ProductionConfig, "default": DevelopmentConfig }
Y en mi archivo __init__.py de aplicación, escribí:
app = Flask(__name__) config_name = os.getenv('FLASK_CONFIGURATION', 'default') app.config.from_object(CONFIGS[config_name])
Ahora, para ejecutar la aplicación entro un nuevo comando:
export FLASK_APP=MyApp export FLASK_CONFIGURATION=development flask run
Desafortunadamente, esta vez el modo de depuración no se activó en absoluto.
Ningún depurador o recargador automático ha sido activado. Lo único que se ha cambiado es que app.debug
ahora es igual a True
.
No lo entiendo. Parece que DEBUG = TRUE
no funciona correctamente.
¿Tienes alguna idea de por qué sucede?
Ejecutar con el depurador es diferente a configurar la configuración DEBUG
. Tienes que hacer ambas cosas. Ejecutar el servidor en modo de desarrollo establece la configuración automáticamente. Normalmente, debe confiar en eso en lugar de establecer la configuración directamente.
La “forma correcta de configurar” que leíste es a) otra manera, no la forma “correcta”, yb) solo establece la configuración, no las variables de entorno FLASK_ENV
o FLASK_DEBUG
, que es lo que controla el modo de depuración del servidor. .
La configuración de la variable de entorno FLASK_ENV=development
le dice a flask run
que envuelva la aplicación con el depurador y el reloader. ( app.run(debug=True)
hace lo mismo pero no puede configurar FLASK_ENV
, que solo tiene una var. env. Ahora se prefiere el comando flask run
). app.debug
cambia algunos comportamientos internos en la aplicación Flask, como pasar los errores al depurador interactivo que el modo de desarrollo habilitó.