window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } 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 }) }, } } })() Verwaltung der Datenbankstruktur über mehrere Zweigstellen hinweg - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2016-07-09
Software-Entwicklung

Verwaltung der Datenbankstruktur über mehrere Zweigstellen hinweg

Tomasz Kowalewski

Bei der Entwicklung einer App geht es nicht nur darum, neue Funktionen zu implementieren oder sie zu patchen. Manchmal muss man die Änderungen rückgängig machen und zum vorherigen Stadium eines Projekts zurückkehren. Ein häufiges Problem, das bei der Arbeit an mehreren Zweigen auftauchen kann, hängt mit der Aufrechterhaltung der richtigen Version einer Datenbankstruktur zusammen. Programmierer, die mit Rails arbeiten, haben fertige Lösungen zur Verfügung. Diese Lösungen unterstützen die Durchführung und Kontrolle von Datenbankänderungen - das sind Migrationen. Ich werde nicht beschreiben, wie sie funktioniert und welche Möglichkeiten sie bietet - ich möchte mich auf das Problem der Beibehaltung der richtigen Version einer Datenbankstruktur beim Wechsel der Zweige konzentrieren.

Die Datenbankschicht einer Anwendung ist ein eigenständiges Wesen und wird nur durch Migrationen gesteuert. Denken Sie bei der Erstellung neuer Migrationen daran, die geplante Umwandlung einer Datenbankstruktur umkehrbar zu machen. Natürlich können wir in extremen Fällen die IrreversibleMigration im unten Methode. Dies informiert uns auch über die Tatsache, dass die Migration nicht rückgängig gemacht werden kann. Es gibt verschiedene Arten von Änderungen, die wir bei der Migration vornehmen - Erstellen, Ändern und Entfernen von Tabellen, Spalten oder Indizes. Die Lösch- und Änderungsvorgänge sind am empfindlichsten gegenüber Änderungen. Und warum? Betrachten wir das folgende Szenario: Wir arbeiten mit dem Master-Zweig, der unser Hauptarbeitspfad ist. Derzeit haben wir eine Tabelle:

 class CreateArticles < ActiveRecord::Migration
   def change
     create_table :articles do |t|
       t.string :name
       t.text :description
       t.string :status, null: false
       t.timestamps null: false
     end
   end
 end

Unser Artikel Modell hat solche Validierungen, die das Vorhandensein von Name, Beschreibung und Status Attribute.

 Klasse Artikel < ActiveRecord::Base
   validiert :name, Vorhandensein: true
   validiert :description, Vorhandensein: true
   validiert :status, Vorhandensein: true
 end

Wir führen Änderungen in unserem Artikel Tabelle auf Funktion Entwicklungszweig und wir löschen die Status Spalte.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def change
     remove_spalte :artikel, :status, :string
   end
 end

Wir führen die Migration durch:

 $ [Beispiel/Feature]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrieren ===================
 -- remove_column(:articles, :status, :string)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: migriert (0.0718s) ==========

Das Schema für eine Datenbank ändert sich:

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 @@ #

Es wird dringend empfohlen, dass Sie diese Datei in Ihr Versionskontrollsystem einchecken.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 20150605120955) do
  createtable "Artikel", force: :cascade do |t|
    t.string "name"
    t.text "Beschreibung"
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "aktualisiert_am", null: false
  Ende

end

Als nächstes übertragen wir die Änderungen in die Funktion Zweig. Um dieses Problem zu simulieren, schalten wir den aktuellen Zweig auf Master um. Die Basisstruktur wurde durch die Migration geändert, wodurch die Status Spalte auf der Funktion Zweig. Versuchen wir, den folgenden Befehl zu verwenden:

Artikel.create!(Name: "Kaboom", Beschreibung: "Lorem ipsum...", Status: "aktiv")

Was geschieht nach der Ausführung der oben genannten Code? Der Fehler: ActiveRecord::UnknownAttributeError: unbekanntes Attribut 'status' für Artikel ausgelöst werden, und zwar wegen der inkompatiblen Strukturversion einer Datenbank. Bevor wir den Zweig auf Master umstellen, sollten wir die Migration zurücknehmen, die die Status Spalte aus der Artikel Tisch.

Was können wir tun, um zu prüfen, ob wir einige Migrationen rückgängig machen müssen, bevor wir die Zweige wechseln? Mit Hilfe des Versionskontrollsystems (hier ist es git) können wir unsere Arbeit überprüfen, indem wir einen hilfreichen Alias erstellen:

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

Ausführen der Git-Migrationen Master-Funktion wird die Liste der Migrationsversionen angezeigt, die sich auf Funktion Zweigstellen, und die nicht auf Meister.

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

Dank dieser Informationen können wir die Änderungen an der Datenbankstruktur, die vor dem Wechsel zum Master vorgenommen wurden, problemlos rückgängig machen.

 $ [Beispiel/Feature]: bundle exec rake db:migrate:down VERSION=20150605120955
 == 20150605120955 RemoveStatusColumnFromArticles: Rückgängig ===================
 -- add_column(:articles, :status, :string)
   -> 0.0009s
 == 20150605120955 RemoveStatusColumnFromArticles: Rückgängig gemacht (0.0045s) ==========

Eine weitere Maßnahme, die wir nach dem Rollback der Migration durchführen sollten, ist die Wiederherstellung des Status eines Datenbankschemas.

$ [Beispiel/Feature]: git status
Auf dem Zweig Feature
Änderungen nicht für die Übergabe bereitgestellt:
 (verwenden Sie "git add ...", um zu aktualisieren, was übertragen werden soll)
 (verwenden Sie "git checkout -- ...", um Änderungen im Arbeitsverzeichnis zu verwerfen)

geändert: db/schema.rb

keine Änderungen zum Commit hinzugefügt (verwenden Sie "git add" und/oder "git commit -a")
$ [Beispiel/Feature]: git checkout db/schema.rb
$ [Beispiel/Merkmal]: git status
Auf Zweigfunktion
nichts zu übertragen, Arbeitsverzeichnis sauber

Jetzt können wir einfach zur Meister Zweigstelle.

Das gegebene Beispiel ist kein kompliziertes Problem, aber es sollte Ihnen helfen zu erkennen, wie wichtig es ist, die Struktur einer Datenbank während der Änderung des Arbeitskontextes zu erhalten.

Ähnliche Artikel

Software-Entwicklung

Zukunftssichere Web-Apps bauen: Einblicke vom The Codest-Expertenteam

Entdecken Sie, wie sich The Codest bei der Erstellung skalierbarer, interaktiver Webanwendungen mit Spitzentechnologien auszeichnet, die nahtlose Benutzererfahrungen auf allen Plattformen bieten. Erfahren Sie, wie unsere Expertise die digitale Transformation und...

DAS SCHÖNSTE
Software-Entwicklung

Top 10 Softwareentwicklungsunternehmen in Lettland

Erfahren Sie in unserem neuesten Artikel mehr über die besten Softwareentwicklungsunternehmen Lettlands und ihre innovativen Lösungen. Entdecken Sie, wie diese Technologieführer Ihr Unternehmen voranbringen können.

thecodest
Enterprise & Scaleups Lösungen

Grundlagen der Java-Softwareentwicklung: Ein Leitfaden für erfolgreiches Outsourcing

Entdecken Sie diesen wichtigen Leitfaden zum erfolgreichen Outsourcing der Java-Softwareentwicklung, um die Effizienz zu steigern, auf Fachwissen zuzugreifen und den Projekterfolg mit The Codest voranzutreiben.

thecodest
Software-Entwicklung

Der ultimative Leitfaden für Outsourcing in Polen

Der Anstieg des Outsourcings in Polen wird durch wirtschaftliche, bildungspolitische und technologische Fortschritte angetrieben, die das IT-Wachstum und ein unternehmensfreundliches Klima fördern.

TheCodest
Enterprise & Scaleups Lösungen

Der vollständige Leitfaden für IT-Audit-Tools und -Techniken

IT-Audits gewährleisten sichere, effiziente und gesetzeskonforme Systeme. Erfahren Sie mehr über ihre Bedeutung, indem Sie den vollständigen Artikel lesen.

Der Codest
Jakub Jakubowicz CTO & Mitbegründer

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

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

    Polen - Lokale Tech-Hubs

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

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

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