For prefect server, I am trying to provide the pos...
# ask-community
f
For prefect server, I am trying to provide the postgres username and password via environment variables, instead of providing the full postgres URL as a single environment variable. That is failing with
AttributeError: 'str' object has no attribute 'get_secret_value'
. Am I missing something? See repro in the thread.
Dockerfile:
Copy code
FROM python:3.10.15-bookworm

RUN pip install prefect==3.1.11
RUN pip install asyncpg==0.30.0

ENV PREFECT_SERVER_DATABASE_DRIVER=postgresql+asyncpg
ENV PREFECT_SERVER_DATABASE_HOST=localhost
ENV PREFECT_SERVER_DATABASE_NAME=prefect
ENV PREFECT_SERVER_DATABASE_PORT=4200
ENV PREFECT_SERVER_DATABASE_USER=prefect
ENV PREFECT_SERVER_DATABASE_PASSWORD=mypassword

ENTRYPOINT ["prefect", "server", "start", "--host", "0.0.0.0"]
Commands:
Copy code
docker build -t prefect-db .
docker run --rm -it prefect-db
Output:
Copy code
Traceback (most recent call last):
  File "/usr/local/bin/prefect", line 5, in <module>
    from prefect.cli import app
  File "/usr/local/lib/python3.10/site-packages/prefect/cli/__init__.py", line 12, in <module>
    import prefect.cli.shell
  File "/usr/local/lib/python3.10/site-packages/prefect/cli/shell.py", line 16, in <module>
    from prefect import flow
  File "<frozen importlib._bootstrap>", line 1075, in _handle_fromlist
  File "/usr/local/lib/python3.10/site-packages/prefect/__init__.py", line 113, in __getattr__
    module = importlib.import_module(mname, package=package)
  File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/local/lib/python3.10/site-packages/prefect/main.py", line 44, in <module>
    prefect.logging.configuration.setup_logging()
  File "/usr/local/lib/python3.10/site-packages/prefect/logging/configuration.py", line 71, in setup_logging
    config = load_logging_config(
  File "/usr/local/lib/python3.10/site-packages/prefect/logging/configuration.py", line 41, in load_logging_config
    template.substitute(current_settings.to_environment_variables())
  File "/usr/local/lib/python3.10/site-packages/prefect/settings/base.py", line 92, in to_environment_variables
    env: Dict[str, Any] = self.model_dump(
  File "/usr/local/lib/python3.10/site-packages/pydantic/main.py", line 426, in model_dump
    return self.__pydantic_serializer__.to_python(
pydantic_core._pydantic_core.PydanticSerializationError: Error calling function `_serialize_secret_field`: AttributeError: 'str' object has no attribute 'get_secret_value'
b