|
@@ -4,6 +4,7 @@ Only the app attribute is explicitly exposed.
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
|
|
from reflex import constants
|
|
|
+from reflex.utils.exec import is_prod_mode
|
|
|
from reflex.utils.prerequisites import get_app, get_compiled_app
|
|
|
|
|
|
if "app" != constants.CompileVars.APP:
|
|
@@ -11,14 +12,20 @@ if "app" != constants.CompileVars.APP:
|
|
|
|
|
|
app_module = get_app(reload=False)
|
|
|
app = getattr(app_module, constants.CompileVars.APP)
|
|
|
-# Force background compile errors to print eagerly
|
|
|
-ThreadPoolExecutor(max_workers=1).submit(app.compile_).add_done_callback(
|
|
|
+compile_future = ThreadPoolExecutor(max_workers=1).submit(app.compile_)
|
|
|
+compile_future.add_done_callback(
|
|
|
+ # Force background compile errors to print eagerly
|
|
|
lambda f: f.result()
|
|
|
)
|
|
|
+# Wait for the compile to finish in prod mode to ensure all optional endpoints are mounted.
|
|
|
+if is_prod_mode():
|
|
|
+ compile_future.result()
|
|
|
|
|
|
# ensure only "app" is exposed.
|
|
|
del app_module
|
|
|
+del compile_future
|
|
|
del get_app
|
|
|
del get_compiled_app
|
|
|
+del is_prod_mode
|
|
|
del constants
|
|
|
del ThreadPoolExecutor
|