window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Administrere databasestruktur på tvers av flere filialer - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2016-07-09
Programvareutvikling

Administrere databasestruktur på tvers av flere filialer

Tomasz Kowalewski

Å utvikle en app betyr ikke bare å implementere nye funksjoner eller patche den. Noen ganger må man reversere endringene og gå tilbake til forrige fase av et prosjekt. Et vanlig problem som kan oppstå når man jobber med flere grener, er å opprettholde den riktige versjonen av en databasestruktur. Programmerere som bruker rails, har ferdige løsninger til rådighet. Disse løsningene støtter implementering og kontroll av databaseendringer - dette er migreringer. Jeg vil ikke beskrive hvordan det fungerer og hvilke muligheter det gir - jeg vil fokusere på problemet med å opprettholde den riktige versjonen av en databasestruktur mens du bytter filialer.

Databaselaget i en app er et eget vesen og styres kun av migreringer. Når du oppretter nye migreringer, må du huske å gjøre den planlagte transformasjonen av en databasestruktur reversibel. I ekstreme tilfeller kan vi selvfølgelig heve IrreversibelMigrasjon i ned metode. Dette vil også informere oss om at migreringen ikke kan reverseres. Vi gjør ulike typer endringer i migreringen - vi oppretter, endrer og fjerner tabeller, kolonner eller indekser. Sletting og modifisering er de mest følsomme for endringer. Hvorfor er det slik? La oss se på følgende scenario: Vi jobber med master-grenen, som er vår viktigste arbeidssti. For øyeblikket har vi én tabell:

 class CreateArticles < ActiveRecord::Migrering
   def change
     create_table :artikler do |t|
       t.string :navn
       t.text :description
       t.string :status, null: false
       t.timestamps null: false
     end
   end
 end

Vår Artikkel modellen har slike valideringer som krever tilstedeværelse av navn, beskrivelse og status attributter.

 class Artikkel < ActiveRecord::Base
   validerer :name, presence: true
   validerer :description, presence: true
   validerer :status, presence: true
 end

Vi er i ferd med å implementere endringer i vår artikler bord på funksjon utviklingsgrenen, og vi sletter status spalte.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migrering
   def endre
     remove_column :artikler, :status, :string
   end
 end

Vi gjennomfører migreringen:

 $ [eksempel/funksjon]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrering ===================
 -- remove_column(:articles, :status, :string)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: migrert (0.0718s) ==========

Skjemaet for en database endres:

diff --git a/db/schema.rb b/db/schema.rb
index 2a100a9..76438c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,13 @@ #

Det anbefales på det sterkeste at du sjekker denne filen inn i ditt versjonskontrollsystem.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(versjon: 20150605120955) do
  createtable "articles", force: :cascade do |t|
    t.string "navn"
    t.text "beskrivelse"
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "updated_at", null: false
  slutt

end

Deretter overfører vi endringene til funksjon gren. For å simulere dette problemet bytter vi den gjeldende grenen til master. Basisstrukturen ble endret ved migrering, noe som sletter status kolonnen på funksjon forgrening. La oss prøve å bruke følgende kommando:

Article.create!(name: "Kaboom", description: "Lorem ipsum...", status: "active")

Hva vil skje etter at du har utført ovennevnte kode? Feilen: ActiveRecord::UnknownAttributeError: ukjent attributt 'status' for artikkel vil bli utløst, og det er på grunn av den inkompatible strukturversjonen av en database. Før vi endrer grenen til master, bør vi rulle tilbake en migrering som sletter status kolonnen fra Artikkel bord.

Hva kan vi gjøre for å sjekke om vi må rulle tilbake noen migreringer før vi bytter gren? Ved hjelp av versjonskontrollsystemet (her er det git) kan vi kontrollere arbeidet vårt ved å opprette et nyttig alias:

 ~/.gitconfig
 [alias]
  migrations = "!f() { git diff --name-only $1..$2 db/migrate | tr -d '[A-Za-z/_.]'; }; f"

Utførelse av git migrations master-funksjon kommandoen vil resultere i en liste over migreringsversjoner, som ligger på funksjon grener, og som ikke finnes på mester.

 $ [example/feature]: git migrations master-funksjon
 20150605120955

Takket være denne informasjonen kan vi enkelt rulle tilbake endringene som er gjort i databasestrukturen før vi bytter til master.

 $ [eksempel/funksjon]: bundle exec rake db:migrate:down VERSION=20150605120955
 == 20150605120955 RemoveStatusColumnFromArticles: reverting ===================
 -- add_column(:articles, :status, :string)
   -> 0.0009s
 == 20150605120955 RemoveStatusColumnFromArticles: reverted (0.0045s) ==========

En annen ting vi bør gjøre etter at vi har rullet tilbake migreringen, er å gjenopprette statusen til et databaseskjema.

$ [eksempel/funksjon]: git-status
På grenfunksjon
Endringer ikke iscenesatt for commit:
 (bruk "git add ..." for å oppdatere det som skal committes)
 (bruk "git checkout -- ..." for å forkaste endringer i arbeidskatalogen)

endret: db/schema.rb

ingen endringer lagt til commit (bruk "git add" og/eller "git commit -a")
$ [eksempel/funksjon]: git checkout db/schema.rb
$ [eksempel/funksjon]: git status
På grenfunksjon
ingenting å committe, arbeidskatalog ren

Nå kan vi enkelt bytte til mester gren.

Eksemplet er ikke et komplisert problem å løse, men det bør hjelpe deg til å innse hvor viktig det er å opprettholde strukturen i en database under endringer i arbeidskonteksten.

Relaterte artikler

Programvareutvikling

Bygg fremtidssikre webapper: Innsikt fra The Codests ekspertteam

Oppdag hvordan The Codest utmerker seg når det gjelder å skape skalerbare, interaktive webapplikasjoner med banebrytende teknologi som gir sømløse brukeropplevelser på tvers av alle plattformer. Finn ut hvordan ekspertisen vår driver digital transformasjon og...

THECODEST
Programvareutvikling

Topp 10 Latvia-baserte programvareutviklingsselskaper

I vår nyeste artikkel kan du lese mer om Latvias beste programvareutviklingsselskaper og deres innovative løsninger. Oppdag hvordan disse teknologilederne kan bidra til å løfte virksomheten din.

thecodest
Løsninger for bedrifter og oppskalering

Grunnleggende om Java-programvareutvikling: En guide til vellykket outsourcing

Utforsk denne viktige veiledningen om vellykket outsourcing av Java-programvareutvikling for å øke effektiviteten, få tilgang til ekspertise og drive frem prosjektsuksess med The Codest.

thecodest
Programvareutvikling

Den ultimate guiden til outsourcing i Polen

Den kraftige økningen i outsourcing i Polen er drevet av økonomiske, utdanningsmessige og teknologiske fremskritt, noe som fremmer IT-vekst og et forretningsvennlig klima.

TheCodest
Løsninger for bedrifter og oppskalering

Den komplette guiden til verktøy og teknikker for IT-revisjon

IT-revisjoner sørger for sikre, effektive og kompatible systemer. Les hele artikkelen for å lære mer om viktigheten av dem.

The Codest
Jakub Jakubowicz CTO og medgrunnlegger

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologisentre

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

    nb_NONorwegian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek nb_NONorwegian