Zum Inhalt springen

Upgrade

Fünf Schritte, die neuesten zuerst. Beginnen Sie mit der Version, die direkt über Ihrer aktuellen liegt, und arbeiten Sie sich nach unten vor – oder fangen Sie, wenn Sie von Version 0.12 kommen, ganz unten an und arbeiten Sie sich nach oben vor.

Sie sind auf Lesen Was sich für Sie ändert
0.18 – 0.20 0.18 → 0.21 context.client.data kompiliert in einem Collection-Callback nicht mehr – führen Sie Abfragen über context.data aus –, und selectedEntities weicht einer Auswahl, die auch für Zeilen stehen kann, die niemand geladen hat. 0.19 und 0.20 deklarieren keine Breaking Changes, daher ist dies ein einziger Schritt ab 0.18.
0.17 0.17 → 0.18 Elf Breaking Changes, die meisten davon eher Kompilierfehler als stillschweigende Verhaltensänderungen. rebase.data fällt zur Laufzeit weg, Peer-Ranges verengen sich auf Carets und die minimale Node-Version steigt auf 22.22.0.
0.14 – 0.16 0.14 → 0.17 Die Admin-Pakete werden umbenannt, Ressourcen werden deklariert statt konfiguriert, und ein zuvor erstelltes Bundle startet auf einer aktuellen Laufzeitumgebung nicht mehr. 0.15 und 0.16 brechen nichts, daher ist dies ein einziger Schritt ab 0.14.
0.13 0.13 → 0.14 Jeder Wire-Key verwendet camelCase und die anonyme Anmeldung ist Opt-in.
0.12 0.12 → 0.13 Der größte Schritt und der einzige, der ändert, wer Ihre Daten lesen darf. Er entfernt das auth-Schema, benennt Pakete um, ändert die Bedeutung von id, streicht CJS, hebt das Admin-Panel auf react-router 8 an und behebt drei Wege, über die unabsichtlich Zugriff erteilt werden konnte.

Die Abschnitte jeder Seite folgen der Reihenfolge, in der Sie die Anpassungen vornehmen müssen, und jeder Abschnitt benennt das Symptom, das Sie andernfalls am falschen Ende debuggen würden.

Danach, ganz gleich, welchen Schritt Sie durchgeführt haben:

  • Die Upgrade-Checkliste unten – die Greps und Befehle, die sich im Anschluss lohnen, zusammengefasst in einem Block.
[ ] grep for authenticated() and (auth|rebase).uid() IS NOT NULL in config/collections/
[ ] decide the intent of each rule; rewrite the ones that meant "public"
[ ] replace not(authenticated()) with serverContext()
[ ] if realtime.requireAuth was true with an AuthAdapter, treat the socket as
having been open — verify RLS on every subscribable collection (section 2)
[ ] SELECT ... FROM pg_policies — record the qual of every policy BEFORE
[ ] update package names and imports
[ ] grep for rebase.data — it is now rebase.dataAsAdmin (section 8)
[ ] grep for the other ten removed deprecated exports (section 8)
[ ] drop react-router-dom; import RouterProvider from "react-router/dom"
[ ] check node >= 22.22.0 and react >= 19.2.7 (react-router 8 requires both)
[ ] move defaultSecurityRules into config/collections/index.ts
[ ] grep for .userId
[ ] grep for row.id on tables not keyed on id
[ ] run db push
[ ] run rebase doctor --policies — expect no Insecure or Orphaned entries
[ ] SELECT ... FROM pg_policies again — confirm every intended change landed
[ ] exercise the app signed OUT, in a private window — watch the websocket too
--- 0.13 → 0.14 (part 2) ---
[ ] re-run rebase generate-sdk, then build — the compiler finds row.author_id
[ ] grep for snake_case where/orderBy keys; a stale one is a 400, not a warning
[ ] grep for raw fetch consumers reading row.<something>_id — these read
undefined and raise nothing
[ ] if the project was introspected, re-run rebase schema introspect
[ ] decide anonymous sign-in: set auth.allowAnonymous: true, or confirm you
never used it (grep for signInAnonymously)
[ ] drop @rebasepro/client-postgres from package.json
--- 0.14 → 0.17 (part 3) ---
[ ] rename @rebasepro/admin → @rebasepro/cms and admin-types → cms-types,
and RebaseAdmin → RebaseCMS
[ ] move dataSources / storageSources out of the backend config into
rebase.json and config/, then `rebase build` — an old bundle will not boot
[ ] grep collections for admin.titleProperty; it is refused at boot now
[ ] grep crons for ctx.client and for `userId` as an identity key
[ ] rename --legacy to --workspace wherever build/start is scripted
[ ] if you implement EmailService yourself, `send` must return a result

rebase doctor --policies ist der Befehl, der in die CI eingebunden werden sollte: Er schlägt mit einem Exit-Code ungleich null fehl, wenn eine Policy noch immer die permissive Tautologie enthält oder von einem früheren Push abgelöst wurde. Der kurze Zeitaufwand für das Auslesen von pg_policies davor und danach lohnt sich dennoch – Sie sehen die Ausdrücke direkt im Wortlaut. Dies ist die einzige Möglichkeit, eine Fail-Open-Policy zu erkennen, die in einer Schreibweise verfasst ist, die der Detektor nicht erfasst. Weder die Pakete noch das Typsystem weisen Sie darauf hin: Die Änderung existiert in der Datenbank, und db push ist der einzige Vorgang, der sie dorthin überträgt.

  • Changelog – die Release-Notes, die jeder dieser Abschnitte zusammenfasst
  • Kompatibilität – die sechs Verträge und welche davon eine Version brechen kann
  • CLI-Befehlerebase doctor und die Befehle, die von den Checklisten ausgeführt werden