iterate / mikrobloggeriet

1 stars 1 forks source link

System for SQL-migrasjoner #89

Closed teodorlu closed 7 months ago

teodorlu commented 7 months ago

Designspørsmål

Motivasjon for å gjøre dette, og grovt hvordan vi kan gjøre det.

Motivasjon

Nå som vi har PostgreSQL-støtte må vi ha en måte å jobbe med SQL-skjemaer. Det kalles migrasjoner.

Jeg vet om to migrering-biblioteker:

Alternativ: Ragtime

Skrevet av James Reeves (også skrevet Ring, Compojure og Hiccup). Litt lavnivå, litt "samle sammen det du trenger". Litt lite dokumentasjon.

Det følger med et lavnivå migrerings-grensesnitt som ikke er koblet på SQL. Som er litt kult.

Alternativ: Migratus

Skrevet av Dmitri Sotnikov, som også har skrevet en bok om web-utvikling i Clojure: https://pragprog.com/titles/dswdcloj3/web-development-with-clojure-third-edition/

Ragtime eller Migratus, hva er best for oss?

Vi har i dag postgresql-støtte med https://github.com/igrishaev/pg2. Migratus funker kun med jdbc (og kanskje jdbc.next). Så jeg tror ganske enkelt Migratus ikke løser noen problemer for oss.

Så jeg prøver med Ragtime.

Systemdesign: migrasjoner på Mikrobloggeriet

Jeg ser for meg:

Beskrivelse av implementasjon

Jeg gikk for Ragtime. Jeg synes det var midt i blinken. At Ragtime er database-agnostisk viste seg å være noe jeg likte. Det krevde lite kode å sette opp, og nå slipper vi magi vi ikke har kontroll over.

Systemdesign

Migreringsstrategi

  1. Ved oppstart gjør vi en migrering, så lenge vi kjører med en database. Migrering på oppstart migrerer kun framover.
  2. For å jobbe med skjemastruktur lokalt kan vi migrere fram og tilbake med funksjonen mikrobloggeriet.db.migrate/migrate-dev!. Denne krasjer hvis den kjøres på hops (krever at HOPS_ENV ikke er satt).