Development and deployment tutorials leave file storage enabled but unconfigured, so pnpm dev crashes and deployed file uploads target localhost
Los mantenedores suelen responder en 3 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- docker-compose, typescript
- Área
- documentation
Línea de trabajo
Lee en docs/en/2-tutorials/2.0-development.mdx la sección sobre Configuration y la configuración de MongoDB, y el paso 4 de docs/en/2-tutorials/2.1-deployment.md; compara sus instrucciones con los valores predeterminados de almacenamiento en .env.template y docker-compose.yaml. Actualiza ambos tutoriales para que aborden el almacenamiento para desarrollo y el endpoint público de despliegue, y luego verifica que la configuración documentada coincida con la configuración esperada; docs/ no tiene un ejecutor de pruebas, así que el issue sugiere seguir cada tutorial en un clon nuevo.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The Development and Deployment tutorials never mention file storage, but the .env they tell you to generate turns it on. Following either tutorial as written gives a broken instance. .env.template sets STORAGE_ENABLED=true with STORAGE_ENDPOINT=http://localhost:9000, and generate-env.sh fills in the keys, so the env schema passes.
- Development.
docker-compose.dev.yamlstarts only MongoDB, and nothing listens on port 9000.StorageService.onModuleInitsendsHeadBucketCommand, catches the failure, and then sends an unguardedCreateBucketCommand, which also rejects. The api exits during boot. Turbo stops the gateway and web dev servers with it, so the tutorial's finalpnpm devends inERROR run failed, and the setup screen never appears. The error never mentions storage. (.agents/docs/playbooks/run-locally.mddocuments this trap for agents, step 4, but the public tutorial does not.) - Deployment. The stack starts, because Compose provides rustfs. The api, however, signs file URLs with
STORAGE_PUBLIC_ENDPOINT, anddocker-compose.yamldefaults that tohttp://localhost:${APP_PORT}/storage. The tutorial says to "leave the other settings as the default values", so every presigned upload and download URL sent to a browser points athttp://localhost:5500/storage/.... That URL means the user's own machine. Every file instrument fails on a deployment that follows the guide. The changelog's 2.0.0 notes say to setSTORAGE_PUBLIC_ENDPOINT"for real deployments", but the tutorial never does.
Where
.env.template:78 and :87:
STORAGE_ENABLED=true
...
STORAGE_PUBLIC_ENDPOINT=
apps/api/src/storage/storage.service.ts:93-103:
async onModuleInit(): Promise<void> {
if (!this.enabled || this.configService.get('NODE_ENV') === 'test') {
return;
}
const { bucket, s3 } = this.requireStorage();
try {
await s3.send(new HeadBucketCommand({ Bucket: bucket }));
} catch {
await s3.send(new CreateBucketCommand({ Bucket: bucket }));
}
}
docker-compose.yaml:43:
- STORAGE_PUBLIC_ENDPOINT=${STORAGE_PUBLIC_ENDPOINT:-http://localhost:${APP_PORT}/storage}
docs/en/2-tutorials/2.0-development.mdx:63-69 (Configuration) and :93-112 (MongoDB only), then :172-176 (pnpm dev). docs/en/2-tutorials/2.1-deployment.md:83-97, where Step 4 edits only SITE_ADDRESS, GATEWAY_SITE_ADDRESS, APP_PORT and GATEWAY_PORT:
For the purposes of this guide, we will leave the other settings as the default values.
Reproduce
Development:
- On a fresh clone, follow the Development tutorial:
./scripts/generate-env.sh, start the dev MongoDB, initiate the replica set,pnpm install,pnpm dev.
Actual: the api crashes on boot with a connection error to localhost:9000, turbo stops all three apps, and http://localhost:3000 never serves the setup screen.
Expected: following the tutorial ends at the setup screen.
Deployment:
- Follow the Deployment tutorial on a server with
SITE_ADDRESS=myplatform.com. - Sign in from another computer and complete a file instrument, such as the demo
ARBITRARY_SINGLE_FILE.
Actual: the browser PUTs the file to http://localhost:5500/storage/open-data-capture/..., which is the user's own computer, and the upload fails.
Expected: the presigned URL uses https://myplatform.com/storage/..., which Caddy proxies to rustfs.
Tests
docs/ has no test runner (docs/AGENTS.md). Verify by following each tutorial on a fresh clone: pnpm dev reaches the setup screen, and a file instrument completes on a deployment that follows the guide.
Suggested fix
- Development tutorial: add a step after "Configuration" to set
STORAGE_ENABLED=falsein.env, saying that file instruments then answer 503. Alternatively, add a rustfs service todocker-compose.dev.yamland say that it provides storage. - Deployment tutorial, Step 4: add
STORAGE_PUBLIC_ENDPOINT=https://myplatform.com/storageto the block of settings to change, and explain that it must be the public address of the core site.
This is separate from #1752, where rustfs itself fails to start on Linux because of a root-owned data directory. With that fixed, the deployment still hands browsers localhost URLs.
- Lenguaje dominante
- TypeScript
- Estrellas
- 119
- Forks
- 19
- Merge medio
- 6 d 16 min
- PR fusionados (30 d)
- 34
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DouglasNeuroInformatics/OpenDataCapture
-
Area: Infrastructure Chore Difficulty: Low Priority: Medium
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
DouglasNeuroInformatics/OpenDataCapture#1835 ·
Los mantenedores suelen responder en 3 días
-
Area: Instruments Bug Difficulty: Low Priority: Low
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DouglasNeuroInformatics/OpenDataCapture#1824 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Area: Shared Bug Difficulty: Low Priority: Low
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
DouglasNeuroInformatics/OpenDataCapture#1813 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Multiple instructions show as one comma-joined paragraph ("questions., Conditional")Posiblemente ocupada @Sanilas-ai la tomó hace 5 días. AbiertoArea: Shared Bug Difficulty: Low Good First Issue Priority: Low
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DouglasNeuroInformatics/OpenDataCapture#1812 · 1 comentario ·
Los mantenedores suelen responder en 3 días
-
Area: Instruments Bug Difficulty: Low Priority: Low
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
DouglasNeuroInformatics/OpenDataCapture#1801 · 1 comentario ·
Los mantenedores suelen responder en 3 días
Todos los issues de DouglasNeuroInformatics/OpenDataCapture
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
vercel-labs/durable-harness#53 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: Redesign tab bars ignore clicks on Linux: hidden chat layers keep window drag regionsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
experiência: a doc manda subir para o Micro do Supabase, mas não diz que exige plano pago nem quanto custaPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoarea/docs area/ui enhancement
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
melgarafael/DeskcommCRM#4098 ·
Los mantenedores suelen responder en 1 día
-
bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
kerti/balances-v2#801 ·
Los mantenedores suelen responder en 1 día
-
lesson-submission pending-review
Dificultad 1/5 Menos de una hora Aptitud para principiantes 84/100
Ikalus1988/MisakaNet#4510 ·
Los mantenedores suelen responder en 1 día