sql >> Base de Datos >  >> NoSQL >> MongoDB

matraz 0.10 mongo trabajando fuera del contexto de la aplicación

Para comprender este error, debe comprender el contexto de la aplicación .

Es completamente posible que alguien escriba varias aplicaciones de Flask que manejen todas sus solicitudes en el mismo proceso. Los documentos dan el siguiente ejemplo...

from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend

application = DispatcherMiddleware(frontend, {
    '/backend':     backend
})

Tenga en cuenta que, en este caso, la aplicación frontend podría usar diferentes configuraciones de Mongo, pero usaría exactamente el mismo objeto de extensión de Mongo. Por esta razón, Flask no puede asumir cuál es la aplicación "actual" cuando ejecuta un script. Por lo tanto, cosas como url_for() , o muchos de los métodos en extensiones como la extensión MongoDB, necesitan saber qué aplicación es la "actual" antes de hacer nada.

Por lo tanto, siempre que intente usar Flask o las funciones de extensión para hacer otra cosa que no sea configurar las aplicaciones en sí (con valores de configuración, etc.), debe decirle explícitamente a Flask cuál es la aplicación actual para asignar a contexto de aplicación .

Los documentos dan una forma de hacer esto...

# Be careful about recursive imports here
from . import app
from .extention import mongo

@sched.interval_schedule(minutes=1)
def long_running_queries():
    with app.app_context():
        mongo.db.command("aggregate", "collection", pipeline = "some query" )

Por lo tanto, deberá crear el objeto de la aplicación en sí, luego usar with app.app_context() línea. Dentro de esa declaración, todas sus llamadas (como las de su extensión Mongo) deberían funcionar. Tenga en cuenta que no necesita hacer nada de esto en una vista porque Flask hará todo esto automáticamente como parte del manejo de una solicitud.