sql >> Databáze >  >> NoSQL >> MongoDB

flask 0.10 mongo pracující mimo kontext aplikace

Abyste této chybě porozuměli, musíte porozumět kontextu aplikace .

Je zcela možné, aby někdo napsal více aplikací Flask, které všechny zpracovávají jejich požadavky ve stejném procesu. Dokumenty uvádějí následující příklad...

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

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

Mějte na paměti, že v tomto případě může frontendová aplikace používat různá nastavení Mongo, ale používat úplně stejný objekt rozšíření Mongo. Z tohoto důvodu nemůže Flask při spuštění skriptu předpokládat, která je „aktuální“ aplikace. Proto věci jako url_for() , nebo mnoho metod na rozšířeních, jako je rozšíření MongoDB, potřebuje vědět, která aplikace je „aktuální“, než něco udělá.

Kdykoli se tedy pokoušíte použít Flask nebo rozšiřující funkce k něčemu jinému než k nastavení samotných aplikací (s konfiguračními hodnotami atd.), musíte Flasku explicitně sdělit, jakou aplikaci má aktuální aplikaci přiřadit k kontext aplikace .

Dokumenty poskytují způsob, jak to můžete udělat..

# 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" )

Budete tedy muset vytvořit samotný objekt aplikace a poté použít with app.app_context() čára. V rámci tohoto příkazu by měly všechny vaše hovory (například hovory na vaši pobočku Mongo) fungovat. Všimněte si, že nic z toho nemusíte v pohledu dělat, protože Flask to všechno automaticky udělá v rámci zpracování požadavku.




  1. 10 tipů, jak zlepšit zabezpečení MongoDB

  2. Připojování k Redis běžícímu v Docker Container z hostitelského počítače

  3. hluboce zalidněné mangusty

  4. jak aktualizovat pole vnořeného objektu v mongodb?