Avoid compile step when running production backend (#1665)
This commit is contained in:
parent
b02afc326e
commit
3916668461
@ -461,6 +461,8 @@ class App(Base):
|
||||
|
||||
def compile(self):
|
||||
"""Compile the app and output it to the pages folder."""
|
||||
if os.environ.get(constants.SKIP_COMPILE_ENV_VAR) == "yes":
|
||||
return
|
||||
# Create a progress bar.
|
||||
progress = Progress(
|
||||
*Progress.get_default_columns()[:-1],
|
||||
|
@ -358,3 +358,6 @@ PING_TIMEOUT = 120
|
||||
|
||||
# Alembic migrations
|
||||
ALEMBIC_CONFIG = os.environ.get("ALEMBIC_CONFIG", "alembic.ini")
|
||||
|
||||
# If this env var is set to "yes", App.compile will be a no-op
|
||||
SKIP_COMPILE_ENV_VAR = "__REFLEX_SKIP_COMPILE"
|
||||
|
@ -137,9 +137,11 @@ def run(
|
||||
if backend and processes.is_process_on_port(backend_port):
|
||||
backend_port = processes.change_or_terminate_port(backend_port, "backend")
|
||||
|
||||
# Get the app module.
|
||||
console.rule("[bold]Starting Reflex App")
|
||||
app = prerequisites.get_app()
|
||||
|
||||
if frontend:
|
||||
# Get the app module.
|
||||
prerequisites.get_app()
|
||||
|
||||
# Warn if schema is not up to date.
|
||||
prerequisites.check_schema_up_to_date()
|
||||
@ -172,10 +174,10 @@ def run(
|
||||
setup_frontend(Path.cwd())
|
||||
commands.append((frontend_cmd, Path.cwd(), frontend_port))
|
||||
if backend and env == constants.Env.PROD:
|
||||
commands.append((backend_cmd, app.__name__, backend_host, backend_port))
|
||||
commands.append((backend_cmd, backend_host, backend_port))
|
||||
with processes.run_concurrently_context(*commands):
|
||||
if env == constants.Env.DEV:
|
||||
backend_cmd(app.__name__, backend_host, int(backend_port))
|
||||
backend_cmd(backend_host, int(backend_port))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@ -268,6 +270,11 @@ def export(
|
||||
db_cli = typer.Typer()
|
||||
|
||||
|
||||
def _skip_compile():
|
||||
"""Skip the compile step."""
|
||||
os.environ[constants.SKIP_COMPILE_ENV_VAR] = "yes"
|
||||
|
||||
|
||||
@db_cli.command(name="init")
|
||||
def db_init():
|
||||
"""Create database schema and migration configuration."""
|
||||
@ -287,6 +294,7 @@ def db_init():
|
||||
return
|
||||
|
||||
# Initialize the database.
|
||||
_skip_compile()
|
||||
prerequisites.get_app()
|
||||
model.Model.alembic_init()
|
||||
model.Model.migrate(autogenerate=True)
|
||||
@ -295,6 +303,7 @@ def db_init():
|
||||
@db_cli.command()
|
||||
def migrate():
|
||||
"""Create or update database schema from migration scripts."""
|
||||
_skip_compile()
|
||||
prerequisites.get_app()
|
||||
if not prerequisites.check_db_initialized():
|
||||
return
|
||||
@ -309,6 +318,7 @@ def makemigrations(
|
||||
),
|
||||
):
|
||||
"""Create autogenerated alembic migration scripts."""
|
||||
_skip_compile()
|
||||
prerequisites.get_app()
|
||||
if not prerequisites.check_db_initialized():
|
||||
return
|
||||
|
@ -87,7 +87,6 @@ def run_frontend_prod(
|
||||
|
||||
|
||||
def run_backend(
|
||||
app_name: str,
|
||||
host: str,
|
||||
port: int,
|
||||
loglevel: constants.LogLevel = constants.LogLevel.ERROR,
|
||||
@ -96,22 +95,22 @@ def run_backend(
|
||||
|
||||
Args:
|
||||
host: The app host
|
||||
app_name: The app name.
|
||||
port: The app port
|
||||
loglevel: The log level.
|
||||
"""
|
||||
config = get_config()
|
||||
app_module = f"{config.app_name}.{config.app_name}:{constants.APP_VAR}"
|
||||
uvicorn.run(
|
||||
app=f"{app_name}:{constants.APP_VAR}.{constants.API_VAR}",
|
||||
app=f"{app_module}.{constants.API_VAR}",
|
||||
host=host,
|
||||
port=port,
|
||||
log_level=loglevel.value,
|
||||
reload=True,
|
||||
reload_dirs=[app_name.split(".")[0]],
|
||||
reload_dirs=[config.app_name],
|
||||
)
|
||||
|
||||
|
||||
def run_backend_prod(
|
||||
app_name: str,
|
||||
host: str,
|
||||
port: int,
|
||||
loglevel: constants.LogLevel = constants.LogLevel.ERROR,
|
||||
@ -120,7 +119,6 @@ def run_backend_prod(
|
||||
|
||||
Args:
|
||||
host: The app host
|
||||
app_name: The app name.
|
||||
port: The app port
|
||||
loglevel: The log level.
|
||||
"""
|
||||
@ -128,6 +126,7 @@ def run_backend_prod(
|
||||
config = get_config()
|
||||
RUN_BACKEND_PROD = f"gunicorn --worker-class uvicorn.workers.UvicornH11Worker --preload --timeout {config.timeout} --log-level critical".split()
|
||||
RUN_BACKEND_PROD_WINDOWS = f"uvicorn --timeout-keep-alive {config.timeout}".split()
|
||||
app_module = f"{config.app_name}.{config.app_name}:{constants.APP_VAR}"
|
||||
command = (
|
||||
[
|
||||
*RUN_BACKEND_PROD_WINDOWS,
|
||||
@ -135,7 +134,7 @@ def run_backend_prod(
|
||||
host,
|
||||
"--port",
|
||||
str(port),
|
||||
f"{app_name}:{constants.APP_VAR}",
|
||||
app_module,
|
||||
]
|
||||
if constants.IS_WINDOWS
|
||||
else [
|
||||
@ -144,7 +143,7 @@ def run_backend_prod(
|
||||
f"{host}:{port}",
|
||||
"--threads",
|
||||
str(num_workers),
|
||||
f"{app_name}:{constants.APP_VAR}()",
|
||||
f"{app_module}()",
|
||||
]
|
||||
)
|
||||
|
||||
@ -154,7 +153,12 @@ def run_backend_prod(
|
||||
"--workers",
|
||||
str(num_workers),
|
||||
]
|
||||
processes.new_process(command, run=True, show_logs=True)
|
||||
processes.new_process(
|
||||
command,
|
||||
run=True,
|
||||
show_logs=True,
|
||||
env={constants.SKIP_COMPILE_ENV_VAR: "yes"}, # skip compile for prod backend
|
||||
)
|
||||
|
||||
|
||||
def output_system_info():
|
||||
|
Loading…
Reference in New Issue
Block a user