window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes 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 }) }, } } })() Håndtering af databasestruktur på tværs af flere filialer - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2016-07-09
Udvikling af software

Håndtering af databasestruktur på tværs af flere filialer

Tomasz Kowalewski

At udvikle en app betyder ikke kun at implementere nye funktioner eller patche den. Nogle gange er man nødt til at gøre ændringerne om og gå tilbage til den tidligere fase af et projekt. Et hyppigt problem, der kan opstå, når man arbejder på flere grene, handler om at opretholde den rette version af en databasestruktur. Programmører, der bruger rails, har færdige løsninger til deres rådighed. Disse løsninger understøtter implementeringen og kontrollen af databaseændringer - det er migreringer. Jeg vil ikke beskrive, hvordan det fungerer, og hvilke muligheder det giver - jeg vil gerne fokusere på problemet med at opretholde den rette version af en databasestruktur, mens man skifter gren.

Databaselaget i en app er et separat væsen og styres kun af migreringer. Når du opretter nye migreringer, skal du huske at gøre den planlagte transformation af en databasestruktur reversibel. I ekstreme tilfælde kan vi selvfølgelig hæve IrreversibelMigration i ned metode. Dette vil også informere os om, at migreringen ikke kan gøres om. Der er forskellige typer af ændringer, som vi foretager i migreringen - oprettelse, ændring og fjernelse af tabeller, kolonner eller indekser. Sletning og ændring er de operationer, der er mest følsomme over for ændringer. Hvorfor er det sådan? Lad os se på følgende scenarie: Vi arbejder med master-grenen, som er vores primære arbejdssti. I øjeblikket har vi én tabel:

 class CreateArticles < ActiveRecord::Migration
   def ændre
     create_table :articles do |t|
       t.string :navn
       t.text :beskrivelse
       t.string :status, null: false
       t.timestamps null: false
     slut
   slut
 end

Vores Artikel modellen har sådanne valideringer, som kræver tilstedeværelse af Navn, beskrivelse og status attributter.

 klasse Artikel < ActiveRecord::Base
   validerer :navn, tilstedeværelse: true
   validerer :description, tilstedeværelse: true
   validerer :status, tilstedeværelse: true
 slut

Vi implementerer ændringer i vores artikler bord på funktion udviklingsgren, og vi sletter status kolonne.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def ændring
     remove_column :articles, :status, :string
   end
 slut

Vi udfører migreringen:

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

Skemaet for en database ændres:

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 kraftigste, at du tjekker denne fil ind i dit versionskontrolsystem.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 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
  slutning

end

Dernæst overfører vi ændringerne til funktion gren. For at simulere dette problem skifter vi den aktuelle gren til master. Basisstrukturen blev ændret ved migrering, som sletter status kolonne på funktion gren. Lad os prøve at bruge følgende kommando:

Article.create!(navn: "Kaboom", beskrivelse: "Lorem ipsum ...", status: "active")

Hvad vil der ske, når du har udført ovenstående? Kode? Fejlen: ActiveRecord::UnknownAttributeError: ukendt attribut 'status' for artikel vil blive udløst, og det er på grund af den inkompatible strukturversion af en database. Før vi ændrer grenen til master, bør vi rulle en migrering tilbage, der sletter status kolonne fra Artikel bord.

Hvad kan vi gøre for at tjekke, om vi er nødt til at rulle nogle migreringer tilbage, før vi skifter gren? Med brug af versionsstyringssystemet (her er det git) kan vi kontrollere vores arbejde ved at oprette et nyttigt alias:

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

Udførelse af git migrations master-funktion kommandoen vil resultere i en liste over migrationsversioner, som er placeret på funktion grene, og som ikke kan findes på mester.

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

Takket være disse oplysninger kan vi nemt rulle de ændringer tilbage, der er foretaget i databasestrukturen, før vi skifter til master.

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

En anden ting, vi bør gøre, når vi har rullet migreringen tilbage, er at gendanne status for et databaseskema.

$ [example/feature]: git status
På gren-funktion
Ændringer, der ikke er iscenesat til commit:
 (brug "git add ..." til at opdatere det, der skal committes)
 (brug "git checkout -- ..." til at kassere ændringer i arbejdsmappen)

ændret: db/schema.rb

ingen ændringer tilføjet til commit (brug "git add" og/eller "git commit -a")
$ [example/feature]: git checkout db/schema.rb
$ [eksempel/feature]: git status
På gren-funktion
intet at committe, arbejdsmappe ren

Nu kan vi nemt skifte til mester gren.

Det givne eksempel er ikke et kompliceret problem at løse, men det bør hjælpe dig med at indse, hvor vigtigt det er at bevare strukturen i en database, når der sker ændringer i arbejdskonteksten.

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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