Browse Source

feat(app_factory): speed up api startup (#11762)

Signed-off-by: -LAN- <laipz8200@outlook.com>
-LAN- 4 months ago
parent
commit
e86756cb39
2 changed files with 33 additions and 5 deletions
  1. 22 5
      api/app.py
  2. 11 0
      api/app_factory.py

+ 22 - 5
api/app.py

@@ -1,13 +1,30 @@
-from app_factory import create_app
-from libs import threadings_utils, version_utils
+from libs import version_utils
 
 # preparation before creating app
 version_utils.check_supported_python_version()
-threadings_utils.apply_gevent_threading_patch()
+
+
+def is_db_command():
+    import sys
+
+    if len(sys.argv) > 1 and sys.argv[0].endswith("flask") and sys.argv[1] == "db":
+        return True
+    return False
+
 
 # create app
-app = create_app()
-celery = app.extensions["celery"]
+if is_db_command():
+    from app_factory import create_migrations_app
+
+    app = create_migrations_app()
+else:
+    from app_factory import create_app
+    from libs import threadings_utils
+
+    threadings_utils.apply_gevent_threading_patch()
+
+    app = create_app()
+    celery = app.extensions["celery"]
 
 if __name__ == "__main__":
     app.run(host="0.0.0.0", port=5001)

+ 11 - 0
api/app_factory.py

@@ -98,3 +98,14 @@ def initialize_extensions(app: DifyApp):
         end_time = time.perf_counter()
         if dify_config.DEBUG:
             logging.info(f"Loaded {short_name} ({round((end_time - start_time) * 1000, 2)} ms)")
+
+
+def create_migrations_app():
+    app = create_flask_app_with_configs()
+    from extensions import ext_database, ext_migrate
+
+    # Initialize only required extensions
+    ext_database.init_app(app)
+    ext_migrate.init_app(app)
+
+    return app