MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

frasco 0.10 mongo trabalhando fora do contexto do aplicativo


Para entender esse erro, você precisa entender o contexto do aplicativo .

É totalmente possível que alguém escreva vários aplicativos Flask que lidem com suas solicitações no mesmo processo. Os documentos fornecem o seguinte exemplo...
from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend

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

Tenha em mente que, neste caso, o aplicativo front-end pode usar diferentes configurações do Mongo, mas usar exatamente o mesmo objeto de extensão do Mongo. Por esse motivo, o Flask não pode assumir qual é o aplicativo "atual" quando você executa um script. Portanto, coisas como url_for() , ou muitos dos métodos em extensões como a extensão MongoDB, precisam saber qual aplicativo é o "atual" antes de fazer qualquer coisa.

Portanto, sempre que você estiver tentando usar o Flask ou funções de extensão para fazer qualquer coisa além de configurar os próprios aplicativos (com valores de configuração, etc.), você precisa informar explicitamente ao Flask qual é o aplicativo atual para atribuir ao contexto do aplicativo .

Os documentos dão uma maneira que você pode fazer isso ..
# 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" )

Portanto, você precisará criar o próprio objeto app e usar o with app.app_context() linha. Dentro dessa instrução with, todas as suas chamadas (como aquelas para o seu ramal Mongo) devem funcionar. Observe que você não precisa fazer nada disso em uma visualização porque o Flask fará tudo isso automaticamente como parte do tratamento de uma solicitação.