Mike Levenson

09/03/2023, 2:29 PM
Hi all I am having a weird bug with Block documents using a self hosted prefect server: I am able to connect to the client and everything is fine but for some reason this weird
url gets injected... what is going on/ what am I doing wrong? I set the configs and env vars
Copy code
17    raise PrefectHTTPStatusError.from_httpx_error(exc) from exc.__cause__18prefect.exceptions.PrefectHTTPStatusError: Client error '404 Not Found' for url '<http://ephemeral-prefect/api/block_documents/782ccd86-fa13-40a6-8e89-278adb4aec24?include_secrets=true'19Response>: {'detail': 'Block document not found'}

Jake Kaplan

09/03/2023, 3:19 PM
hey, this means PREFECT_API_URL isn’t set on the client. So it’s not talking to your hosted server, it’s using the ephemeral api instead.

Mike Levenson

09/03/2023, 3:50 PM


09/03/2023, 3:51 PM
@Jake Kaplan thank you for your speedy answer, this is what we have anticipated but we are explicitly setting it in an

Mike Levenson

09/03/2023, 3:53 PM
Yea I felt like that may be the issue and I explicitly set this multiple times in 3 different ways @Jake Kaplan
Copy code
class MulticastPrefectOperator:

    def __init__(self, settings: MulticastInfraSettings = MulticastInfraSettings()):
        PREFECT_API_URL = "<>"
        os.environ["PREFECT_API_URL"] = PREFECT_API_URL
        os.system(f"prefect config set PREFECT_API_URL={PREFECT_API_URL}")

        self.settings = settings
        self.prefect_client: PrefectClient = PrefectClient(api="<>")
works in some places and for some reason its failing in others🤷

Jake Kaplan

09/03/2023, 4:23 PM
Normally you would set that in your profile.
prefect config set PREFECT_API_URL=...
or set as an env var on the machine so it gets picked up in the settings context
Instantiating an instance of the client with that url won't set it globally. There can be multiple instances of the client. Are you trying to use the client directly for something?

Michael Levenson

09/03/2023, 4:26 PM
yep- want to query flow runs

Jake Kaplan

09/03/2023, 4:33 PM
I see. I would try looking at the docs I linked to set
in the two ways I mentioned above, so it will be set for the entire context at the start of the process
then you should be able to do something like:
Copy code
from prefect import flow
from prefect.client.orchestration import get_client

async def my_flow():
    async with get_client() as client:
        await client.read_flow_runs(...)