{"record":{"id":"70e0bf778512d1bb","repo":"reflex-dev/reflex","slug":"backend-servers-are-not-initialized","errorCode":null,"errorMessage":"Backend servers are not initialized.","messagePattern":"Backend servers are not initialized\\.","errorType":"exception","errorClass":"TimeoutError","httpStatus":null,"severity":"error","filePath":"reflex/testing.py","lineNumber":602,"sourceCode":"\n        Returns:\n            first active listening socket on the backend\n\n        Raises:\n            RuntimeError: when the backend hasn't started running\n            TimeoutError: when server or sockets are not ready\n        \"\"\"\n        if self.backend is None:\n            msg = \"Backend is not running.\"\n            raise RuntimeError(msg)\n        backend = self.backend\n        # check for servers to be initialized\n        if not self._poll_for(\n            target=lambda: getattr(backend, \"servers\", False),\n            timeout=timeout,\n        ):\n            msg = \"Backend servers are not initialized.\"\n            raise TimeoutError(msg)\n        # check for sockets to be listening\n        if not self._poll_for(\n            target=lambda: getattr(backend.servers[0], \"sockets\", False),\n            timeout=timeout,\n        ):\n            msg = \"Backend is not listening.\"\n            raise TimeoutError(msg)\n        return backend.servers[0].sockets[0]\n\n    def frontend(\n        self,\n        driver_clz: type[WebDriver] | None = None,\n        driver_kwargs: dict[str, Any] | None = None,\n        driver_options: ArgOptions | None = None,\n        driver_option_args: list[str] | None = None,\n        driver_option_capabilities: dict[str, Any] | None = None,\n    ) -> WebDriver:\n        \"\"\"Get a selenium webdriver instance pointed at the app.","sourceCodeStart":584,"sourceCodeEnd":620,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/reflex/testing.py#L584-L620","documentation":"TimeoutError raised by AppHarness._poll_for_servers when uvicorn's `backend.servers` list stays empty within the timeout — the ASGI server object exists but hasn't begun serving (no server instances registered) yet.","triggerScenarios":"Backend event loop is stalled or extremely slow (heavy app import, event-loop policy issues, CPU-starved CI runner) so uvicorn hasn't initialized its servers within the poll timeout.","commonSituations":"Slow CI machines or first-run cold caches; app module doing heavy work at import time; deadlocked async fixture blocking the backend loop.","solutions":["Reduce heavy import-time work in the app under test","Retry the test / increase parallelism limits on starved CI runners","Check for exceptions in backend logs that prevented uvicorn from binding (e.g. port in use)"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"started = harness._poll_for(target=lambda: bool(getattr(harness.backend, \"servers\", False)), timeout=10)\nif not started:\n    raise AssertionError(\"uvicorn servers not initialized; backend loop may be stalled\")","typeGuard":null,"tryCatchPattern":"try:\n    harness.start()\nexcept TimeoutError:\n    # cold cache / slow CI; retry once\n    harness.start()","preventionTips":["Move heavy work out of app module import time","Warm dependency caches in CI to speed backend boot"],"tags":["reflex","testing","app-harness","backend","uvicorn","timeout"],"backgroundTag":"server-startup-timeout","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}