window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } 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 }) }, } } })() Tietokannan rakenteen hallinta useissa haaroissa - The Codest
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2016-07-09
Ohjelmistokehitys

Tietokannan rakenteen hallinta useissa haaroissa

Tomasz Kowalewski

Sovelluksen kehittäminen ei tarkoita vain uusien toimintojen käyttöönottoa tai korjaamista. Joskus muutokset on peruutettava ja palattava projektin edelliseen vaiheeseen. Usein esiin tuleva ongelma, kun työskennellään useiden haarojen parissa, liittyy tietokantarakenteen asianmukaisen version ylläpitoon. Kiskoja käyttävillä ohjelmoijilla on käytössään valmiita ratkaisuja. Nämä ratkaisut tukevat tietokantamuutosten toteuttamista ja hallintaa - nämä ovat migraatioita. En kuvaile, miten se toimii ja mitä mahdollisuuksia se tuo mukanaan - haluan keskittyä ongelmaan, joka liittyy tietokantarakenteen sopivan version ylläpitämiseen haarojen vaihtamisen aikana.

Sovelluksen tietokantakerros on erillinen olento, ja sitä hallitaan vain migraatioilla. Kun luot uusia migraatioita, muista tehdä tietokantarakenteen suunnitellusta muutoksesta palautuva. Ääritapauksissa voimme tietysti nostaa IrreversibleMigration vuonna alas menetelmä. Tämä kertoo myös siitä, että siirtymistä ei voi peruuttaa. Siirtymisessä tehdään erityyppisiä muutoksia - luodaan, muutetaan ja poistetaan tauluja, sarakkeita tai indeksejä. Poisto- ja muokkaustoiminnot ovat herkimpiä muutoksille. Miksi? Tarkastellaan seuraavaa skenaariota: Työskentelemme master-haaralla, joka on päätyöpolkumme. Tällä hetkellä meillä on yksi taulukko:

 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

Meidän Artikkeli mallissa on tällaisia validointeja, jotka edellyttävät, että läsnä on nimi, kuvaus ja tila ominaisuudet.

 class Artikkeli < ActiveRecord::Base
   validates :name, presence: true
   validates :description, presence: true
   validates :status, presence: true
 end

Toteutamme muutoksia artikkelit taulukko ominaisuus kehityshaaraan ja poistamme tila sarake.

 class RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def change
     remove_column :articles, :status, :string
   end
 end

Toteutamme migraation:

 $ [example/feature]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrating ===================
 -- remove_column(:articles, :status, :string)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: siirretty (0.0718s) ==========

Tietokannan skeema muuttuu:

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

On erittäin suositeltavaa, että kirjaat tämän tiedoston versionhallintajärjestelmääsi.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 20150605120955) do
  createtable "articles", force: :cascade do |t|
    t.string "nimi"
    t.text "description"
- t.string "status", null: false t.datetime "createsat", null: false
    t.datetime "updated_at", null: false
  end

end

Seuraavaksi teemme muutokset tiedostoon ominaisuus haara. Simuloidaksemme tätä ongelmaa vaihdamme nykyisen haaran masteriksi. Perusrakennetta muutettiin migraatiolla, joka poistaa tiedoston tila sarakkeessa ominaisuus haara. Yritetään käyttää seuraavaa komentoa:

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

Mitä tapahtuu, kun edellä mainitut toimenpiteet on suoritettu koodi? Virhe: ActiveRecord::UnknownAttributeError: tuntematon attribuutti 'status' tuotteelle Article ja se johtuu tietokannan yhteensopimattomasta rakenneversiosta. Ennen kuin muutamme haaran masteriksi, meidän pitäisi peruuttaa migraatio, joka poistaa version tila sarakkeesta Artikkeli pöytä.

Mitä voimme tehdä tarkistaaksemme, onko meidän peruutettava joitakin siirtoja ennen haarojen vaihtamista? Versiohallintajärjestelmän avulla (tässä se on git) voimme tarkistaa työmme luomalla hyödyllisen aliaksen:

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

Suorittaminen git-siirtymät master-ominaisuus komennon tuloksena saadaan luettelo siirtymisversioista, jotka sijaitsevat osoitteessa ominaisuus ja joita ei löydy osoitteesta master.

 $ [esimerkki/ominaisuus]: git migrations master-ominaisuus
 20150605120955

Tämän tiedon ansiosta voimme helposti peruuttaa tietokantarakenteeseen tehdyt muutokset ennen master-käyttöjärjestelmään siirtymistä.

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

Vielä yksi asia, joka meidän pitäisi tehdä migraation palauttamisen jälkeen, on palauttaa tietokantakaavion tila.

$ [example/feature]: git status
Osiossa feature
Muutoksia ei ole siirretty toimitusta varten:
 (käytä "git add ..." päivittääksesi, mitä tullaan toimittamaan).
 (käytä "git checkout -- ..." hylätäksesi muutokset työhakemistossa).

Muutettu: db/schema.rb

ei muutoksia lisätty toimitukseen (käytä "git add" ja/tai "git commit -a").
$ [example/feature]: git checkout db/schema.rb
$ [example/feature]: git status
Osiossa ominaisuus
ei mitään siirrettävää, työhakemisto puhdas

Nyt voimme helposti vaihtaa master haara.

Tämä esimerkki ei ole monimutkainen ongelma, mutta sen pitäisi auttaa sinua ymmärtämään, miten tärkeää on säilyttää tietokannan rakenne työympäristön muuttuessa.

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

Tulevaisuuden web-sovellusten rakentaminen: The Codest:n asiantuntijatiimin näkemyksiä

Tutustu siihen, miten The Codest loistaa skaalautuvien, interaktiivisten verkkosovellusten luomisessa huipputeknologian avulla ja tarjoaa saumattomia käyttäjäkokemuksia kaikilla alustoilla. Lue, miten asiantuntemuksemme edistää digitaalista muutosta ja liiketoimintaa...

THECODEST
Ohjelmistokehitys

Top 10 Latviassa toimivaa ohjelmistokehitysyritystä

Tutustu Latvian parhaisiin ohjelmistokehitysyrityksiin ja niiden innovatiivisiin ratkaisuihin uusimmassa artikkelissamme. Tutustu siihen, miten nämä teknologiajohtajat voivat auttaa nostamaan liiketoimintaasi.

thecodest
Yritys- ja skaalausratkaisut

Java-ohjelmistokehityksen perusteet: A Guide to Outsourcing Successfully

Tutustu tähän keskeiseen oppaaseen Java-ohjelmistokehityksen onnistuneesta ulkoistamisesta tehokkuuden parantamiseksi, asiantuntemuksen saamiseksi ja projektin onnistumiseksi The Codestin avulla.

thecodest
Ohjelmistokehitys

Perimmäinen opas ulkoistamiseen Puolassa

Ulkoistamisen lisääntyminen Puolassa johtuu taloudellisesta, koulutuksellisesta ja teknologisesta kehityksestä, joka edistää tietotekniikan kasvua ja yritysystävällistä ilmapiiriä.

TheCodest
Yritys- ja skaalausratkaisut

Täydellinen opas IT-tarkastustyökaluihin ja -tekniikoihin

Tietotekniikan tarkastuksilla varmistetaan turvalliset, tehokkaat ja vaatimustenmukaiset järjestelmät. Lue lisää niiden merkityksestä lukemalla koko artikkeli.

Codest
Jakub Jakubowicz teknologiajohtaja ja toinen perustaja

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

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