DAPR_* environment variables are snapshotted at import time, so loading config after import silently dials localhost
Maintainer antworten meist innerhalb von 4 Tagen
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Start with the dapr.conf settings module, which reads the DAPR_* variables at import, and with dapr.conf.helpers.GrpcEndpoint, which builds the endpoint from them. Run the reproduction in the issue to confirm the value stays None after os.environ changes. Done means either the settings are read when a client is constructed, or a clear error or warning is raised when os.environ and the snapshot disagree. The issue leaves the choice between these options to the maintainers, so confirm the approach before writing code.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
What happens
dapr.conf.settings reads the DAPR_* environment variables when the module is
first imported. Setting them afterwards has no effect, and the SDK silently
falls back to dns:localhost:50001 instead of the configured endpoint. There is
no warning and no error — the first symptom is a connection failure that looks
like a network or platform problem.
This is easy to hit with any of the common config patterns: python-dotenv in a
config.py, a settings module, a CLI that parses args before wiring the client,
or a framework that imports your package before your .env loader runs.
Reproduction
import os
assert "DAPR_GRPC_ENDPOINT" not in os.environ
import dapr.conf as conf
print(conf.settings.DAPR_GRPC_ENDPOINT) # None
os.environ["DAPR_GRPC_ENDPOINT"] = "https://grpc-example.example.com:443"
print(os.environ["DAPR_GRPC_ENDPOINT"]) # the value we just set
print(conf.settings.DAPR_GRPC_ENDPOINT) # None <-- still
from dapr.conf.helpers import GrpcEndpoint
ep = GrpcEndpoint(conf.settings.DAPR_GRPC_ENDPOINT
or f"localhost:{conf.settings.DAPR_GRPC_PORT}")
print(ep.endpoint) # dns:localhost:50001
Observed output:
1. imported dapr.conf with no DAPR_GRPC_ENDPOINT set
settings.DAPR_GRPC_ENDPOINT = None
settings.DAPR_GRPC_PORT = 50001
2. set DAPR_GRPC_ENDPOINT AFTER import
os.environ value = https://grpc-example.example.com:443
settings.DAPR_GRPC_ENDPOINT = None
3. endpoint the SDK would dial: dns:localhost:50001
Expected
Any of the following would have saved the debugging time:
- Read the setting lazily, at client construction, rather than at import.
- Keep the import-time read, but re-check
os.environwhen a client is built
and raise or warn on a mismatch betweenos.environ["DAPR_GRPC_ENDPOINT"]
andsettings.DAPR_GRPC_ENDPOINT. - Document it prominently in the client docs — "set
DAPR_*before importing
dapr" — since the current failure mode is silent.
(1) seems best; (2) is the cheapest thing that makes the failure loud.
Environment
dapr1.18.3,dapr-ext-workflow1.18.3- Python 3.12.12, macOS 15 (darwin 24.3.0)
- Talking to a managed Dapr control plane over a remote gRPC endpoint, so the
localhost fallback can never succeed
Why it matters
Against a local sidecar the fallback is often correct, which is why this is
rarely noticed. Against any remote or managed endpoint it is always wrong, and
the error surfaces far from its cause — the one I chased presented as "every
connection fails", with correct-looking values in .env and in os.environ.
- Vorherrschende Sprache
- Python
- Sterne
- 273
- Forks
- 156
- Ø Merge
- 6 T. 6 Std.
- Gemergte PRs (30 T.)
- 16
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus dapr/python-sdk
-
SDK Alignment of Workflow ExamplesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offendapr-ext-workflow good first issue kind/enhancement P2
Schwierigkeit 2/5 1-2 Tage Anfängerfreundlichkeit 72/100
dapr/python-sdk#853 · 4 Kommentare ·
Maintainer antworten meist innerhalb von 4 Tagen
-
[WORKFLOW SDK FEATURE REQUEST] Retry WaitForInstanceCompletion/Start on a server-sent CANCELLEDOffendapr-ext-workflow kind/enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
dapr/python-sdk#1246 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
[BUG] subscribe_with_handler stops silently: async task can die or be collected, sync retry path exits, handler errors reconnect the streamEvtl. vergeben @CasperGN hat das vor 18 Tagen übernommen. Offenkind/bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 65/100
dapr/python-sdk#1233 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
[BUG] Configuration subscription stops permanently after the daprd sidecar restartsEvtl. vergeben @CasperGN hat das vor 14 Tagen übernommen. Offenkind/bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 68/100
dapr/python-sdk#1232 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
[BUG] Streaming subscribe returns None after a reconnect, making test_streaming_subscribe_receives_published_message flakyEvtl. vergeben @CasperGN hat das vor 18 Tagen übernommen. Offenkind/bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
dapr/python-sdk#1230 ·
Maintainer antworten meist innerhalb von 4 Tagen
Alle Issues in dapr/python-sdk
Ähnliche Issues
-
SSM GetParameter throttling during concurrent workflow launchesEvtl. vergeben @alexiswl hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 80/100
-
[Bug] Dev image build fails: `npm install` in the root Dockerfile runs out of memory (exit 134)Evtl. vergeben @andest01 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
pesu-dev/discord_bot#97 ·
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
gradio-app/gradio#13964 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 93/100
BSData/horus-heresy-3rd-edition#3232 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag