fix(dispatch): 連錯 Redis 還是靜默的——補啟動 log,並收掉兩個仍指向 6379 的地方 - #73
Merged
Conversation
#72 讓 docker 的 redis 對外發布 6380,但「連到哪一台」這個問題本身還是查不出來, 而且有兩個地方仍把人導回 6379: 1. `scripts/push_e2e.sh` 的起服務註解寫 `REDIS_ADDR=localhost:6379`——照著做就會 重現 #72 修掉的那個坑(靜默連到 Mac 本機的 redis-server)。改成 6380 並寫明理由。 2. `config.Load()` 的缺省值是 `localhost:6379`。這個缺省值只有「服務跑在主機、 又忘了設 REDIS_ADDR」時才會用到——那正是會連錯台的情境。改成 6380。 docker compose 內一律明設 `REDIS_ADDR=redis:6379`,不受這行影響。 順帶更正 `Load()` 的註解:缺省值對應的是「服務在主機、相依服務在 docker」的 本地跑法,不是 compose 內部(compose 會把 DB_HOST/REDIS_ADDR 明設成服務名)。 但真正的根因不是埠號寫錯,是**連錯不會失敗**:兩台都是健康的 redis,ping 都會過, 於是限流/派單狀態寫進了另一台,而你在容器裡怎麼查都查不到。所以最重要的一行是 ping 成功之後把位址印出來(比照 DB 印 statement_timeout 的理由:ops 可見)—— 讓「連到哪一台」變成一行 log,而不是一小時的猜測。 驗收:gofmt 乾淨、go build ./... 通過、go vet ./... 無輸出、 go test ./internal/config/ ok。新增 2 個 config 測試(缺省 6380/明設就照用), 反向驗證:把缺省值改回 6379,缺省那案 FAIL。 啟動 log 那一行只驗到編譯,**沒有實跑觀察**——起 server 會跑 migration,依約定要先問過。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner
Author
補上實跑證據:PR 內文寫的「啟動 log 只驗到編譯,沒有實跑觀察」現在過期了,以本則為準合併後補跑了。剛好本機那台 前置:先證明是兩台不同的 redis不靠
三種跑法各起一次 server,log 都指認正確(
C 這條順帶把缺省值那個改動驗成端到端——不只是單元測試裡的字串比對,是真的沒設環境變數時服務會連到 docker 那台。 B 那次才是這行 log 存在的理由連到錯的那台之後:
也就是說,補這行之前「連錯台」和「連對台」在畫面上長得一模一樣:狀態安靜地寫進另一台,你只能靠猜(#72 當初就是這樣繞了一圈)。現在那一行就是答案。 收尾三個 server 程序都已結束、寫進兩台 redis 的 🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
起因
#72 合併後回頭掃了一次
6379,發現兩個地方仍把人導回舊埠,而且更重要的是:#72 讓 docker 的 redis 讓開了埠號,但「這次到底連到哪一台」這個問題本身還是查不出來。根因一句話
連錯不會失敗——兩台都是健康的 redis,
Ping都會過,所以限流/派單狀態安安靜靜寫進了另一台,而你在容器裡redis-cli KEYS怎麼查都查不到,很容易誤判成「鍵根本沒寫進去」。埠號寫錯只是誘因,靜默才是病。改了什麼
cmd/server/main.golog.Info().Str("redis_addr", …)statement_timeout的理由:ops 可見internal/config/config.golocalhost:6379→localhost:6380REDIS_ADDR」時才會用到——那正是會連錯台的情境。compose 內一律明設REDIS_ADDR=redis:6379,不受影響internal/config/config.goLoad()的註解更正DB_HOST/REDIS_ADDR明設成服務名)。同一件事有兩種說法比沒寫更糟scripts/push_e2e.sh6379→127.0.0.1:6380為什麼缺省值也要改(而不是只改文件)
因為文件是「照著做才會對」,缺省值是「什麼都不做就會錯」。忘記設環境變數的人不會去讀 README——他會得到一個看起來完全正常、實際上寫到別台的服務。
驗收
gofmt乾淨、go build ./...通過、go vet ./...無輸出、go test ./internal/config/ok。REDIS_ADDR就照用(後者釘的是「缺省值的改動不可以影響 compose」)。localhost:6379→ 缺省那案 FAIL(實際:localhost:6379),改回 6380 才綠。🤖 Generated with Claude Code