reflex-dev/reflex · error · ArchiveUploadError

could not reach the deployment service

Error message

could not reach the deployment service: {ex}

What it means

Thrown by upload_archives when reserving the upload fails at the transport level (any httpx.HTTPError that is not a status error): DNS failure, connection refused, timeout, TLS error. The CLI cannot reach the hosting deployment service at all, so no reservation could be made.

Solutions

  1. Check network connectivity to the Reflex hosting service endpoint
  2. Configure proxy environment variables (HTTP_PROXY/HTTPS_PROXY) if behind a corporate proxy
  3. Retry the deploy once connectivity is restored
Defensive patterns

Strategy: retry

Validate before calling

import socket
socket.gethostbyname(urlparse(constants.Hosting.HOSTING_SERVICE).hostname)  # fails fast if DNS is broken

Try / catch

try:
    upload_archives(...)
except ArchiveUploadError as ex:
    if 'could not reach the deployment service' in str(ex):
        wait_and_retry_with_backoff()

Prevention

When it happens

Trigger: reserve_archive_upload raises httpx.ConnectError/ConnectTimeout/ReadTimeout during create_deployment; network down, proxy blocking, firewall, or the hosting service endpoint unreachable.

Common situations: Corporate proxy/VPN intercepting requests; no internet connectivity; custom HOSTING_SERVICE URL misconfigured; transient network outage.

Related errors


AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28). Data as JSON: /api/errors/246fe24985df304f. Report an issue: GitHub.

Appendix: source

Thrown at packages/reflex-hosting-cli/src/reflex_cli/utils/hosting.py:2236

    Returns:
        The deployment id the archives now live under, or None if this control
        plane has no reserve endpoint and they have to be relayed instead.

    Raises:
        ArchiveUploadError: The archives could not be put where they belong.

    """
    import httpx

    for attempt in range(UPLOAD_ATTEMPTS):
        try:
            reservation = reserve_archive_upload(app_id, sizes, client)
        except httpx.HTTPStatusError as ex:
            raise ArchiveUploadError(
                _response_detail(ex.response, f"HTTP {ex.response.status_code}")
            ) from ex
        except httpx.HTTPError as ex:
            raise ArchiveUploadError(
                f"could not reach the deployment service: {ex}"
            ) from ex
        if reservation is None:
            return None
        try:
            _put_reserved_archives(zip_dir, reservation, sizes)
        except httpx.HTTPStatusError as ex:
            if ex.response.status_code != HTTPStatus.FORBIDDEN:
                raise ArchiveUploadError(
                    f"could not upload the build to storage: HTTP {ex.response.status_code}"
                ) from ex
            if attempt < UPLOAD_ATTEMPTS - 1:
                logger.warning("the upload window expired; reserving another one")
        except httpx.HTTPError as ex:
            raise ArchiveUploadError(f"could not upload the build: {ex}") from ex
        else:
            return reservation["deployment_id"]
    raise ArchiveUploadError(

View on GitHub (pinned to 45b8ed5ab7)