stack: rest readiness probe (GET /) never passes when a db_pre_request hook rejects requests without an app header
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 66/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- postgresql, typescript
Direzione di ricerca
Find the experimental stack rest service recipe and its readiness probe; compare it with the Docker recipe’s PostgREST admin port configuration and the native runtime’s exposed ports. Check the readiness and service startup tests first. Done means the service becomes ready when PostgREST is serving even if db_pre_request rejects an anonymous GET /, and the eager and lazy startup cases pass.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Affected area
Local development: experimental stack engine ([experimental] stack = true), rest service readiness.
Supabase CLI version
2.121.0 and 2.122.0-beta.1
Operating system
Linux x86_64 (glibc 2.44)
Installation method
npx
Command
supabase start --runtime native --eager (also reproduced with lazy start)
Actual output
With --eager, start fails:
ExperimentalStackStartError: Composition start had failures
rest (...): ... is not ready: rest HTTP readiness timed out
Recent stdout:
127.0.0.1 - anon [...] "GET / HTTP/1.1" 403 71 "" ""
127.0.0.1 - anon [...] "GET / HTTP/1.1" 403 71 "" ""
With the default lazy start, supabase start succeeds, but the first Data API request (which carries the header the hook requires) waits about 60 s and then returns 502 from the gateway, because rest never becomes ready. The same request sent directly to the PostgREST process returns 200.
Expected behavior
rest is reported ready once PostgREST is up and serving, independent of how the project's db_pre_request hook answers an anonymous GET /.
The rest recipe hardcodes healthPath: "/" on the data port. GET / runs the configured db_pre_request function, so any project whose hook rejects requests without an application header (for example a shared proxy-secret check) can never pass readiness. PostgREST has an admin server with GET /ready for this purpose; the Docker recipe already sets PGRST_ADMIN_SERVER_PORT. In the native runtime I only saw the data port listening. Probing /ready on the admin port, or treating any HTTP response from the data port as "up", would fix it.
Steps to reproduce
SUPABASE_EXPERIMENTAL_STACK=1 supabase init- Add
supabase/migrations/20260101000000_pre_request_hook.sql:
create schema hooks;
create function hooks.check_request() returns void language plpgsql as $$
begin
if current_setting('request.headers', true)::json->>'x-app-secret' is distinct from 'expected' then
raise sqlstate 'PGRST' using
message = json_build_object('code', 'APP_403', 'message', 'Unauthorized.')::text,
detail = json_build_object('status', 403, 'headers', json_build_object())::text;
end if;
end;
$$;
grant usage on schema hooks to anon, authenticated, service_role;
grant execute on function hooks.check_request() to anon, authenticated, service_role;
alter role authenticator set pgrst.db_pre_request = 'hooks.check_request';
notify pgrst, 'reload config';
create table public.notes (id int primary key);
grant select on public.notes to anon;
supabase start --runtime native --eagerfails withrest HTTP readiness timed out.- Control: without that migration, the same command exits 0.
- Lazy variant:
supabase start --runtime native, thencurl -H 'x-app-secret: expected' -H "apikey: $PUBLISHABLE_KEY" "$API_URL/rest/v1/notes"returns502after about 60 s.
Crash report ID
N/A
Docker and service versions
Native runtime (PostgREST 16.4, Postgres 17). The Docker runtime uses the same recipe healthPath.
Additional context
The default (non-stack) engine works with the same hook, so this blocks adopting per-worktree stacks for projects that gate the Data API in a pre-request hook.
- Lingua principale
- TypeScript
- Stelle
- 2.4k
- Fork
- 537
- Merge medio
- 19h 40m
- PR unite (30g)
- 403
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di supabase/cli
-
stack: the gateway sets no X-Forwarded-For or X-Real-IP, so Edge Functions cannot see the client IPAperta🐛 Bug supabase/cli
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
config push: changing auth.oauth_server.authorization_url_path fails with 400 (enabled and path must be sent together)Forse già presa @itz-puneet l’ha presa 6 giorni fa. Aperta🐛 Bug supabase/cli
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
supabase/cli#7087 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
db schema declarative sync: no way to fail (non-zero exit) when the generated migration is destructiveForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta✨ Feature supabase/cli
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
📘 Docs supabase/cli
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
supabase/cli#6974 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Migration error caret is missing or misplaced when the statement contains multibyte charactersAperta🐛 Bug supabase/cli
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di supabase/cli
Issue simili
-
bug hacktoberfest help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
libredb/libredb-studio#1941 ·
I maintainer di solito rispondono entro 1 giorno
-
chore other
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
alastair-smith/card-games#308 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
paperclipai/paperclip#17379 ·
I maintainer di solito rispondono entro 1 giorno
-
[good first issue, hacktoberfest] 🏯 Hacktoberfest Task - Add new Anime Quote 626 (good-first-issue)Apertacommunity first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
lingdojo/kana-dojo#33040 · 1 commento · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
bug mobile ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno