Skip to content

Commit b572c44

Browse files
Masaharu Hayashiclaude
andcommitted
fix(tools): 接続できないときの案内を実態に合わせる
measure.sh は 000(接続不可)にも「egg-info を再生成して再起動」と案内して いたが、これはコードの新旧の問題ではなく測定条件が実機と違う場合で、 従っても直らない。000 は専用の案内に分け、動いているコンテナと公開ポートを 出して measure_profile.json を直すよう促す。 preflight.sh はコンテナ名と URL を実機から探して export 行の形で出す。 compose のプロジェクト名はチェックアウト先のディレクトリ名になるため、 weko-web-1 / :8443 という既定は環境によって当たらない。 あわせて curl 失敗時に code が "000000" になる連結も直した。 OPERATIONS.md §2-4 に実際の値の調べ方と、既に作られた measure_profile.json は環境変数では変わらないことを書いた。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent b8f4dd9 commit b572c44

3 files changed

Lines changed: 74 additions & 7 deletions

File tree

docs/OPERATIONS.md

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,42 @@ export WEKO_HOST_HEADER=weko3.example.org
110110
export INV=tools/api-inventory/scripts
111111
```
112112

113-
**実機の場所(コンテナ名・URL・Host)を既定から変えているなら、この 3 つを必ず設定する。**
114-
台帳ツールは初回に `$WEKO_API_INVENTORY_DIR/measure_profile.json` を作るとき、この 3 つを既定値として書き込む。
113+
#### 自分の環境の値を調べる
114+
115+
**上の既定値をそのまま使えるとは限らない。** compose のプロジェクト名は
116+
**チェックアウトしたディレクトリ名**になるので、`~/wekov2` に clone していればコンテナは
117+
`weko-web-1` ではなく `wekov2-web-1` になる。公開ポートも compose ファイル次第で変わる。
118+
119+
```bash
120+
docker ps --format '{{.Names}} {{.Ports}}' | grep -E 'web|nginx'
121+
```
122+
123+
```text
124+
wekov2-nginx-1 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp ← 443 なので https://localhost
125+
wekov2-web-1 0.0.0.0:5001->5000/tcp ← これが WEKO_WEB_CONTAINER
126+
```
127+
128+
この例なら次のようになる。**`preflight.sh` は正しい値を見つけて `export` 行の形で出すので、
129+
分からなければ先に流してよい**(§2-6)。
130+
131+
```bash
132+
export WEKO_WEB_CONTAINER=wekov2-web-1
133+
export WEKO_BASE_URL=https://localhost
134+
```
135+
136+
#### `measure_profile.json` との関係
137+
138+
台帳ツールは初回に `$WEKO_API_INVENTORY_DIR/measure_profile.json` を作るとき、上の 3 つを既定値として書き込む。
115139
**作られたあとは JSON が正**で、環境変数を変えても既存のファイルは書き換わらない
116140
(測定条件を変えたいときは JSON を直す。`tools/api-inventory/scripts/README.md`)。
117141

142+
**すでに間違った値で作られている場合は JSON を直す。** 環境変数だけ直しても `measure.sh`
143+
古い値を使い続け、「トップページが 000」で止まる。
144+
145+
```bash
146+
grep -E 'web_container|base_url' "$WEKO_API_INVENTORY_DIR/measure_profile.json"
147+
```
148+
118149
毎回打つのが面倒なら前の 2 つを `~/.bashrc` に書いてよい。
119150
**`INV` は相対パスなので、`~/weko` の中で作業しているときしか使えない。**
120151

@@ -501,6 +532,7 @@ git push origin v2.1.0
501532
|---|---|---|
502533
| `no python application found` / `AttributeError: module ... has no attribute` | egg-info の再生成漏れ | 手順 2 をやり直す。再生成前後で件数が変わらないことを確認するまで確定させない |
503534
| 切り替えたのに旧バージョンの経路が生きている | uwsgi が古いコードのまま | 手順 2 の再起動と確認コマンド |
535+
| `measure.sh` が「トップページが 000」で止まる | 接続できていない。プロファイルの `base_url` / `web_container` が実機と違う | §2-4 で実際の値を調べ、`measure_profile.json` を直す。コードの新旧とは無関係なので egg-info を作り直しても直らない |
504536
| `reconcile.py` の件数が減らない | 台帳の行の追加漏れ、または `impl_file` の記載誤り | `reconcile.py``--gate` なし)で A/B/C/D/E の内訳を読む。詳細は `tools/api-inventory/ci/README.md` §4 |
505537
| 測定結果が「ほぼ全部遮断」 | 書き込み系を叩いて自分のセッションを消した | 手順 6 の 2 つの確認。`--refresh-fixtures` で張り直して測り直す |
506538
| ゲートが落ちて先へ進めない | G1〜G9 / reconcile A〜E | `docs/RULE.md` §3-3 の原則に従う。**G3/G4/G8/G9 の例外は RCOS 公開基盤チームリーダの承認が要る** |

tools/api-inventory/scripts/measure.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ if [ -z "$SKIP_VERIFY" ]; then
5353
# snapshot.py は毎回新プロセスなので即反映されるが、probe は uwsgi を叩くため
5454
# egg-info の再生成と restart をしないと別バージョンを測ることになる。
5555
code="$(curl -sk --max-time 20 -o /dev/null -w '%{http_code}' -H "Host: $HOSTHDR" "$BASE/" || true)"
56+
if [ "$code" = "000" ]; then
57+
# 接続そのものができていない。コードの新旧ではなく、測定条件が実機と違う。
58+
say "$BASE/ に接続できません(code=000)。プロファイルの値が実機と合っていません。"
59+
say " いま動いているコンテナと公開ポート:"
60+
if command -v docker >/dev/null 2>&1; then
61+
docker ps --format ' {{.Names}} {{.Ports}}' 2>/dev/null | grep -E 'web|nginx' || say " (該当なし。実機が起動していない)"
62+
fi
63+
say " 合う値を $PROFILE の base_url / web_container に書くこと。"
64+
say " compose のプロジェクト名はチェックアウト先のディレクトリ名になるので、"
65+
say " コンテナ名は weko-web-1 とは限らない(例 wekov2-web-1)。"
66+
exit 1
67+
fi
5668
if [ "$code" != "200" ]; then
5769
say " ★トップページが $code。egg-info を再生成して web を再起動してください。"
5870
say " docker exec $WEB_CONTAINER bash -lc 'cd /code && for d in modules/*/; do (cd \"\$d\" && python setup.py -q egg_info); done'"

tools/release/preflight.sh

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,37 @@ HOSTHDR="${WEKO_HOST_HEADER:-weko3.example.org}"
110110
if command -v docker >/dev/null 2>&1; then
111111
if docker ps --format '{{.Names}}' 2>/dev/null | grep -qx "$WEB"; then
112112
ok "実機コンテナが動いている($WEB"
113-
code=$(curl -sk -o /dev/null -w '%{http_code}' -H "Host: $HOSTHDR" "$BASEURL/" 2>/dev/null || echo 000)
114-
if [ "$code" = "200" ]; then
115-
ok "トップページが 200($BASEURL / Host: $HOSTHDR"
113+
else
114+
# compose のプロジェクト名はチェックアウト先のディレクトリ名になるため、
115+
# コンテナ名は weko-web-1 とは限らない。動いているものから候補を出す。
116+
cand=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -E -- '-web-1$|^web$|web' | head -1 || true)
117+
if [ -n "$cand" ]; then
118+
ng "実機コンテナ $WEB が動いていない(動いているのは $cand" "export WEKO_WEB_CONTAINER=$cand"
119+
else
120+
ng "実機コンテナ $WEB が動いていない" "./install.sh で起動する(別名なら export WEKO_WEB_CONTAINER=...)"
121+
fi
122+
fi
123+
124+
# curl は接続失敗でも '000' を出力して非ゼロで終わる。|| echo で足すと二重になる。
125+
code=$(curl -sk --max-time 10 -o /dev/null -w '%{http_code}' -H "Host: $HOSTHDR" "$BASEURL/" 2>/dev/null || true)
126+
[ -n "$code" ] || code=000
127+
if [ "$code" = "200" ]; then
128+
ok "トップページが 200($BASEURL / Host: $HOSTHDR"
129+
elif [ "$code" = "000" ]; then
130+
# 接続できていない。URL が実機と違う可能性が高いので、候補を当たって出す。
131+
found=""
132+
for u in https://localhost https://localhost:8443 http://localhost http://localhost:8080; do
133+
[ "$u" = "$BASEURL" ] && continue
134+
c=$(curl -sk --max-time 5 -o /dev/null -w '%{http_code}' -H "Host: $HOSTHDR" "$u/" 2>/dev/null || true)
135+
[ "$c" = "200" ] && { found="$u"; break; }
136+
done
137+
if [ -n "$found" ]; then
138+
ng "$BASEURL/ に接続できない($found なら 200)" "export WEKO_BASE_URL=$found"
116139
else
117-
caut "トップページが $code(200 でない" "起動直後なら待つ。続くなら docker logs $WEB を見る"
140+
ng "$BASEURL/ に接続できない(code=000" "実機が起動しているか、公開ポートを確認する: docker ps --format '{{.Names}} {{.Ports}}'"
118141
fi
119142
else
120-
ng "実機コンテナ $WEB が動いていない" "./install.sh で起動する(別名なら export WEKO_WEB_CONTAINER=...)"
143+
caut "トップページが $code(200 でない)" "起動直後なら待つ。続くなら docker logs $WEB を見る"
121144
fi
122145
fi
123146

0 commit comments

Comments
 (0)