Spaces:
Runtime error
Runtime error
fix(deploy): usa 'rsconnect deploy fastapi' (no 'deploy shiny') para el gateway FastAPI
Browse files- docs/ejecucion.md +4 -2
- scripts/deploy_prod.ps1 +6 -3
docs/ejecucion.md
CHANGED
|
@@ -187,6 +187,8 @@ uv run rsconnect add --account <cuenta> --name <cuenta> --token <TOKEN> --secret
|
|
| 187 |
El script ejecuta el pipeline completo de extremo a extremo. **Tú solo corres un comando:**
|
| 188 |
|
| 189 |
```powershell
|
|
|
|
|
|
|
| 190 |
# Primer deploy (crea la app en ShinyApps.io y te devuelve su app-id):
|
| 191 |
.\scripts\deploy_prod.ps1 -Name <cuenta>
|
| 192 |
# Redeploy (cuando ya tengas el app-id del primer deploy):
|
|
@@ -197,7 +199,7 @@ Internamente `deploy_prod.ps1` hace, sin intervención:
|
|
| 197 |
1. **(0)** Compila la UI con `build.ps1` (`pnpm build` → `inline_js.py` → `backend/static`).
|
| 198 |
2. **(1)** Genera `requirements.txt` (`uv export --no-dev --no-hashes --no-emit-project`) — ShinyApps instala desde ahí, no usa `uv`.
|
| 199 |
3. **(2)** Traduce cada línea de `.rscignore` a flags `--exclude` (rsconnect-python no lee `.rscignore` solo).
|
| 200 |
-
4. **(3)** `rsconnect deploy
|
| 201 |
|
| 202 |
> Parámetros (`-Name`, `-AppId`) y el detalle paso a paso del script están en **§8.5**.
|
| 203 |
> **BYOK / seguridad:** el `.env` **NO** viaja en el bundle (está en `.rscignore`); en producción las llaves las pone el usuario por sesión (cabeceras `X-User-*`).
|
|
@@ -362,7 +364,7 @@ Despliega el repo como una app ASGI cuyo entrypoint es el **gateway** (`backend.
|
|
| 362 |
0. **`build.ps1`** (compila la UI a `backend/static`).
|
| 363 |
1. **`uv export --no-dev --no-hashes --no-emit-project -o requirements.txt`** (ShinyApps instala desde `requirements.txt`, no usa `uv`).
|
| 364 |
2. Traduce cada línea de **`.rscignore`** a flags `--exclude` (rsconnect-python no lee `.rscignore` solo).
|
| 365 |
-
3. **`rsconnect deploy
|
| 366 |
|
| 367 |
**Parámetros:**
|
| 368 |
|
|
|
|
| 187 |
El script ejecuta el pipeline completo de extremo a extremo. **Tú solo corres un comando:**
|
| 188 |
|
| 189 |
```powershell
|
| 190 |
+
# Compilar la UI:
|
| 191 |
+
.\scripts\build.ps1
|
| 192 |
# Primer deploy (crea la app en ShinyApps.io y te devuelve su app-id):
|
| 193 |
.\scripts\deploy_prod.ps1 -Name <cuenta>
|
| 194 |
# Redeploy (cuando ya tengas el app-id del primer deploy):
|
|
|
|
| 199 |
1. **(0)** Compila la UI con `build.ps1` (`pnpm build` → `inline_js.py` → `backend/static`).
|
| 200 |
2. **(1)** Genera `requirements.txt` (`uv export --no-dev --no-hashes --no-emit-project`) — ShinyApps instala desde ahí, no usa `uv`.
|
| 201 |
3. **(2)** Traduce cada línea de `.rscignore` a flags `--exclude` (rsconnect-python no lee `.rscignore` solo).
|
| 202 |
+
4. **(3)** `rsconnect deploy fastapi . --entrypoint backend.main:app --name <cuenta> [--app-id <id>]` *(es `deploy fastapi`, no `deploy shiny`: el gateway es una app FastAPI/ASGI)*.
|
| 203 |
|
| 204 |
> Parámetros (`-Name`, `-AppId`) y el detalle paso a paso del script están en **§8.5**.
|
| 205 |
> **BYOK / seguridad:** el `.env` **NO** viaja en el bundle (está en `.rscignore`); en producción las llaves las pone el usuario por sesión (cabeceras `X-User-*`).
|
|
|
|
| 364 |
0. **`build.ps1`** (compila la UI a `backend/static`).
|
| 365 |
1. **`uv export --no-dev --no-hashes --no-emit-project -o requirements.txt`** (ShinyApps instala desde `requirements.txt`, no usa `uv`).
|
| 366 |
2. Traduce cada línea de **`.rscignore`** a flags `--exclude` (rsconnect-python no lee `.rscignore` solo).
|
| 367 |
+
3. **`rsconnect deploy fastapi . --entrypoint backend.main:app --name <cuenta> [--app-id <id>] @exclude`** — subcomando **`fastapi`** (no `shiny`): el entrypoint es una app FastAPI/ASGI, y `rsconnect` soporta FastAPI en shinyapps.io.
|
| 368 |
|
| 369 |
**Parámetros:**
|
| 370 |
|
scripts/deploy_prod.ps1
CHANGED
|
@@ -52,11 +52,14 @@ if ($Name -eq "<TU_CUENTA_SHINYAPPS>") {
|
|
| 52 |
exit 1
|
| 53 |
}
|
| 54 |
|
| 55 |
-
# 3) Desplegar
|
| 56 |
-
|
|
|
|
|
|
|
|
|
|
| 57 |
$appIdArgs = @()
|
| 58 |
if ($AppId) { $appIdArgs = @("--app-id", $AppId) }
|
| 59 |
-
& uv run python -c "from rsconnect.main import cli; cli()" deploy
|
| 60 |
--entrypoint backend.main:app --name $Name @appIdArgs @excludeArgs
|
| 61 |
|
| 62 |
Write-Host "`n=== Despliegue completado ===" -ForegroundColor Green
|
|
|
|
| 52 |
exit 1
|
| 53 |
}
|
| 54 |
|
| 55 |
+
# 3) Desplegar como app FastAPI (ASGI). OJO: NO es 'deploy shiny' (eso espera una app
|
| 56 |
+
# Shiny); el gateway es FastAPI, así que el subcomando correcto es 'deploy fastapi'
|
| 57 |
+
# (rsconnect lo soporta para shinyapps.io). El entrypoint es el gateway que sirve
|
| 58 |
+
# la UI Astro en / y la API en /api.
|
| 59 |
+
Write-Host "`n[3/3] Desplegando (deploy fastapi, entrypoint backend.main:app)..." -ForegroundColor Yellow
|
| 60 |
$appIdArgs = @()
|
| 61 |
if ($AppId) { $appIdArgs = @("--app-id", $AppId) }
|
| 62 |
+
& uv run python -c "from rsconnect.main import cli; cli()" deploy fastapi . `
|
| 63 |
--entrypoint backend.main:app --name $Name @appIdArgs @excludeArgs
|
| 64 |
|
| 65 |
Write-Host "`n=== Despliegue completado ===" -ForegroundColor Green
|