このエラーを理解するには、アプリケーションコンテキスト を理解する必要があります。 。
誰かが同じプロセスでリクエストを処理する複数のFlaskアプリケーションを作成することは完全に可能です。ドキュメント
from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend
application = DispatcherMiddleware(frontend, {
'/backend': backend
})
この場合、フロントエンドアプリは異なるMongoセットアップを使用できますが、まったく同じMongo拡張オブジェクトを使用することに注意してください。このため、Flaskは、スクリプトを実行するときに、どちらが「現在の」アプリであるかを推測できません。したがって、url_for()
など 、またはMongoDB拡張機能などの拡張機能の多くのメソッドは、何かを実行する前に、どのアプリケーションが「現在の」アプリケーションであるかを知る必要があります。
したがって、Flaskまたは拡張機能を使用して、アプリケーション自体をセットアップする以外のこと(構成値など)を実行しようとする場合は常に、
ドキュメントには、これを実行できる方法が記載されています。
# 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" )
そのため、アプリオブジェクト自体を作成してから、with app.app_context()
を使用する必要があります。 ライン。そのwithステートメント内で、すべての呼び出し(Mongo拡張機能への呼び出しなど)が機能するはずです。 Flaskはリクエストの処理の一部としてこれらすべてを自動的に実行するため、ビューでこれを行う必要はないことに注意してください。