Spaces:
Sleeping
Sleeping
ryota commited on
Commit ·
34b6a6d
1
Parent(s): d1ee284
Spaces では 0.0.0.0 で待ち受ける
Browse filesDocker 版は Dockerfile で HOST=0.0.0.0 を渡していたが、Gradio SDK には
Dockerfile が無いためその指定が消え、127.0.0.1 のまま起動していた。
外側の入口からコンテナ内へ届かず RUNTIME_ERROR になる。
自分のPCでは 127.0.0.1 のまま(外から入れない状態を保つ)。
- spaces の読み込み失敗も握るようにした(環境によっては ImportError 以外も出る)
- app.py +15 -2
- tests/test_app.py +14 -0
app.py
CHANGED
|
@@ -29,10 +29,12 @@ try:
|
|
| 29 |
import spaces # type: ignore
|
| 30 |
|
| 31 |
HAS_SPACES = True
|
| 32 |
-
except
|
| 33 |
spaces = None
|
| 34 |
HAS_SPACES = False
|
| 35 |
|
|
|
|
|
|
|
| 36 |
ON_ZERO_GPU = HAS_SPACES and os.environ.get("SPACES_ZERO_GPU") is not None
|
| 37 |
GPU_DEVICE = "cuda" if ON_ZERO_GPU else ""
|
| 38 |
|
|
@@ -405,10 +407,21 @@ with gr.Blocks(title="商談文字起こし") as demo:
|
|
| 405 |
component.change(remember, inputs=settings, outputs=saved)
|
| 406 |
|
| 407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
if __name__ == "__main__":
|
| 409 |
password = os.environ.get("APP_PASSWORD")
|
| 410 |
demo.launch(
|
| 411 |
-
server_name=
|
| 412 |
server_port=int(os.environ.get("PORT", "7860")),
|
| 413 |
auth=(os.environ.get("APP_USER", "spin"), password) if password else None,
|
| 414 |
allowed_paths=[str(WORK_ROOT)],
|
|
|
|
| 29 |
import spaces # type: ignore
|
| 30 |
|
| 31 |
HAS_SPACES = True
|
| 32 |
+
except Exception: # 自分のPCには無い。Spaces でも環境次第で読めないことがある
|
| 33 |
spaces = None
|
| 34 |
HAS_SPACES = False
|
| 35 |
|
| 36 |
+
ON_SPACES = os.environ.get("SPACE_ID") is not None
|
| 37 |
+
|
| 38 |
ON_ZERO_GPU = HAS_SPACES and os.environ.get("SPACES_ZERO_GPU") is not None
|
| 39 |
GPU_DEVICE = "cuda" if ON_ZERO_GPU else ""
|
| 40 |
|
|
|
|
| 407 |
component.change(remember, inputs=settings, outputs=saved)
|
| 408 |
|
| 409 |
|
| 410 |
+
def listen_on() -> str:
|
| 411 |
+
"""待ち受け先。
|
| 412 |
+
|
| 413 |
+
自分のPCでは 127.0.0.1(外から入れない)。Spaces では外側の入口から
|
| 414 |
+
コンテナ内へ届かないと起動失敗になるので 0.0.0.0 にする。
|
| 415 |
+
"""
|
| 416 |
+
if os.environ.get("HOST"):
|
| 417 |
+
return os.environ["HOST"]
|
| 418 |
+
return "0.0.0.0" if ON_SPACES else "127.0.0.1"
|
| 419 |
+
|
| 420 |
+
|
| 421 |
if __name__ == "__main__":
|
| 422 |
password = os.environ.get("APP_PASSWORD")
|
| 423 |
demo.launch(
|
| 424 |
+
server_name=listen_on(),
|
| 425 |
server_port=int(os.environ.get("PORT", "7860")),
|
| 426 |
auth=(os.environ.get("APP_USER", "spin"), password) if password else None,
|
| 427 |
allowed_paths=[str(WORK_ROOT)],
|
tests/test_app.py
CHANGED
|
@@ -109,3 +109,17 @@ def test_GPUの飾りは環境で切り替わる():
|
|
| 109 |
|
| 110 |
if not web.ON_ZERO_GPU:
|
| 111 |
assert web.on_gpu(plain) is plain
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
if not web.ON_ZERO_GPU:
|
| 111 |
assert web.on_gpu(plain) is plain
|
| 112 |
+
|
| 113 |
+
|
| 114 |
+
def test_待ち受け先は環境で変わる(monkeypatch):
|
| 115 |
+
"""Spaces で 127.0.0.1 のままだと外から届かず起動に失敗する。"""
|
| 116 |
+
monkeypatch.delenv("HOST", raising=False)
|
| 117 |
+
|
| 118 |
+
monkeypatch.setattr(web, "ON_SPACES", False)
|
| 119 |
+
assert web.listen_on() == "127.0.0.1" # 自分のPCでは外に開かない
|
| 120 |
+
|
| 121 |
+
monkeypatch.setattr(web, "ON_SPACES", True)
|
| 122 |
+
assert web.listen_on() == "0.0.0.0" # Spaces では外から届くように
|
| 123 |
+
|
| 124 |
+
monkeypatch.setenv("HOST", "1.2.3.4")
|
| 125 |
+
assert web.listen_on() == "1.2.3.4" # 指定があればそれに従う
|