window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Hantering av databasstruktur i flera filialer - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2016-07-09
Utveckling av programvara

Hantera databasstruktur över flera filialer

Tomasz Kowalewski

Att utveckla en app innebär inte bara att implementera nya funktioner eller patcha den. Ibland måste man backa ändringarna och gå tillbaka till det tidigare stadiet i ett projekt. Ett vanligt problem som kan dyka upp när man arbetar med flera grenar är kopplat till att upprätthålla rätt version av en databasstruktur. Programmerare som använder rails har färdiga lösningar till sitt förfogande. Dessa lösningar stöder implementering och kontroll av databasändringar - det här är migreringar. Jag kommer inte att beskriva hur det fungerar och vilka möjligheter det ger - jag skulle vilja fokusera på problemet med att upprätthålla lämplig version av en databasstruktur medan du byter grenar.

Databaslagret i en app är en separat varelse och styrs endast av migreringar. När du skapar nya migreringar ska du komma ihåg att göra den planerade omvandlingen av en databasstruktur reversibel. Naturligtvis kan vi i extrema fall höja IrreversibelMigration i ner metod. Detta kommer också att informera oss om det faktum att migreringen inte kan återkallas. Det finns olika typer av ändringar som vi gör i migreringen - vi skapar, ändrar och tar bort tabeller, kolumner eller index. Radering och modifiering är de operationer som är mest känsliga för förändringar. Varför är det så? Låt oss tänka på följande scenario:Vi arbetar med mastergrenen, som är vår huvudsakliga arbetsväg. För närvarande har vi en tabell:

 class CreateArticles < ActiveRecord::Migration
   def ändra
     create_table :artiklar do |t|
       t.sträng :namn
       t.text :beskrivning
       t.string :status, null: false
       t.tidsstämplar null: false
     slut
   slut
 slut

Vår Artikel modellen har sådana valideringar som kräver att det finns namn, beskrivning och status attribut.

 klass Artikel < ActiveRecord::Bas
   validerar :namn, närvaro: true
   validerar :description, närvaro: true
   validerar :status, närvaro: true
 slut

Vi genomför förändringar i vårt Artiklar bord på funktion utvecklingsgren och vi tar bort status kolumn.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def ändra
     remove_column :artiklar, :status, :sträng
   slut
 slut

Vi verkställer migreringen:

 $ [exempel/funktion]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrering ===================
 -- remove_column(:artiklar, :status, :sträng)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: migrerad (0.0718s) ==========

Schemat för en databas ändras:

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 rekommenderas starkt att du checkar in den här filen i ditt versionskontrollsystem.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 20150605120955) do
  createtable "articles", force: :cascade do |t|
    t.sträng "namn"
    t.text "beskrivning"
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "updated_at", null: false
  slut

slut

Därefter överför vi ändringarna till funktion gren. För att simulera det här problemet byter vi den aktuella grenen till master. Basstrukturen ändrades genom migrering, vilket tar bort status kolumn på funktion gren. Låt oss försöka använda följande kommando:

Artikel.skapa!(namn: "Kaboom", beskrivning: "Lorem ipsum...", status: "aktiv")

Vad kommer att hända efter att ha utfört ovan nämnda kod? Felet: ActiveRecord::UnknownAttributeError: okänt attribut 'status' för artikel kommer att uppstå och det beror på den inkompatibla strukturversionen av en databas. Innan vi ändrar grenen till master bör vi rulla tillbaka en migrering som raderar status kolumn från Artikel bord.

Vad kan vi göra för att kontrollera om vi måste rulla tillbaka några migreringar innan vi byter grenar? Med hjälp av versionskontrollsystemet (här är det git) kan vi kontrollera vårt arbete genom att skapa ett användbart alias:

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

Exekvering av git migreringar master funktion kommandot kommer att resultera i en lista över migreringsversioner, som finns på funktion grenar, och som inte kan hittas på mästare.

 $ [exempel/funktion]: git-migreringar masterfunktion
 20150605120955

Tack vare denna information kan vi enkelt rulla tillbaka de ändringar som gjorts i databasstrukturen innan vi bytte till master.

 $ [exempel/funktion]: bundle exec rake db:migrate:down VERSION=20150605120955
 == 20150605120955 RemoveStatusColumnFromArticles: återställer ===================
 -- add_column(:artiklar, :status, :sträng)
   -> 0.0009s
 == 20150605120955 RemoveStatusColumnFromArticles: reverted (0.0045s) ==========

Ytterligare en sak som vi bör göra efter att ha rullat tillbaka migreringen är att återställa statusen för ett databasschema.

$ [exempel/funktion]: git status
På gren funktion
Ändringar inte iscensatta för commit:
 (använd "git add ..." för att uppdatera vad som kommer att skickas)
 (använd "git checkout -- ..." för att kasta ändringar i arbetskatalogen)

modifierad: db/schema.rb

inga ändringar tillagda till commit (använd "git add" och/eller "git commit -a")
$ [exempel/funktion]: git checkout db/schema.rb
$ [exempel/funktion]: git status
På gren funktion
inget att göra, arbetskatalog ren

Nu kan vi enkelt växla till mästare gren.

Det här exemplet är inte särskilt komplicerat att lösa, men det bör hjälpa dig att inse hur viktigt det är att behålla strukturen i en databas när arbetssituationen förändras.

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

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

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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