Riippuvuuden päivittäminen
Jossain vaiheessa saatat tietysti haluta päivittää sovelluksesi riippuvuuden version. Voit esimerkiksi haluta päivittää rails
:n 3.0.0
lopulliseksi. Tärkeää on, että vaikka päivität yhden riippuvuuden, se ei tarkoita, että haluat ratkaista uudelleen kaikki riippuvuudet ja käyttää uusinta versiota kaikesta. Esimerkissämme sinulla on vain kolme riippuvuutta, mutta tässäkin tapauksessa kaiken päivittäminen voi aiheuttaa komplikaatioita.
Kuvituksena rails 3.0.0.rc
gem riippuu actionpack 3.0.0.rc
gem:stä, joka riippuu rack ~> 1.2.1
:stä (mikä tarkoittaa >= 1.2.1
ja ). The
rack-cache
gem riippuu rack >= 0.4
:stä. Oletetaan, että rails 3.0.0
lopullinen gem riippuu myös rack ~> 1.2.1
:stä, ja että rails 3.0.0
:n julkaisun jälkeen Rack-tiimi julkaisi rack 1.2.2
:n.
Jos naiivisti päivitämme kaikki gemimme päivittääksemme Railsin, saamme rack 1.2.2
, joka täyttää sekä rails 3.0.0
:n ettärack-cache
:n vaatimukset. Emme kuitenkaan erikseen pyytäneet päivittämäänrack-cache
, joka ei ehkä ole yhteensopiva rack 1.2.2
:n kanssa (jostain syystä). Ja vaikka päivitys rack 1.2.1
:stä rack 1.2.2
:een ei luultavasti rikkoisi mitään, samanlaisia skenaarioita voi tapahtua, jotka sisältävät paljon suurempia hyppäyksiä. (ks. alla laajempi keskustelu)
Tämän ongelman välttämiseksi, kun päivität helmiä, bundler ei päivitä kyseisen helmen riippuvuutta, jos toinen helmi on edelleen riippuvainen siitä. Tässä esimerkissä, koskarack-cache
on edelleen riippuvainen rack
:stä, bundler ei päivitärack
-helmeä. Näin varmistetaan, että rails
:n päivittäminen ei vahingossa riko rack-cache
:tä. Koska rails 3.0.0
:n riippuvuusactionpack 3.0.0
pysyy yhteensopivana rack 1.2.1
:n kanssa, bundler jättää sen rauhaan, ja rack-cache
toimii edelleen, vaikka se olisi yhteensopimaton rack 1.2.2
:n kanssa.
Koska alun perin ilmoitit riippuvuuden rails 3.0.0.rc
:stä, jos haluat päivittää rails 3.0.0
:n, päivitä Gemfile
yksinkertaisesti gem 'rails', '3.0.0'
:ksi ja suorita:
$ bundle install
Kuten edellä on kuvattu, bundle install
-komento tekee aina konservatiivisenpäivityksen, kieltäytyen päivittämästä jalokiviä (tai niiden riippuvuussuhteita), joita et ole eksplisiittisesti muuttanut Gemfile
:ssä. Tämä tarkoittaa sitä, että jos et muuta rack-cache
:aa Gemfile
:ssäsi, bundler käsittelee sitä **ja sen riippuvuuksia** (rack
) yhtenä, muokkaamattomana yksikkönä. Jos rails 3.0.0
oli yhteensopimaton rack-cache
:n kanssa, bundler ilmoittaa ristiriidasta tilannekuvattujen riippuvuuksiesi (Gemfile.lock
) ja päivitetyn Gemfile
:n välillä.
Jos päivität Gemfile
:n ja järjestelmässäsi on jo kaikki tarvitsemasi riippuvuudet, bundler päivittää läpinäkyvästi Gemfile.lock
:n, kun käynnistät sovelluksesi. Jos esimerkiksi lisäät mysql
:n Gemfile
:ään ja olet jo asentanut sen järjestelmääsi, voit käynnistää sovelluksesi ajamatta bundle install
:tä, ja bundler säilyttää ”viimeisimmän tunnetun hyvän” konfiguraation Gemfile.lock
:n tilannekuvassa.
Tämä voi olla kätevää, kun lisäät tai päivität helmiohjelmia, joilla on minimaaliset riippuvuudet (databasedrivers, wirble
, ruby-debug
). Se luultavasti epäonnistuu, jos päivität helmiä, joilla on merkittäviä riippuvuuksia (rails
) tai joista monet gemit ovat riippuvaisia (rack
). Jos läpinäkyvä päivitys epäonnistuu, sovelluksesi ei käynnisty, ja bundler tulostaa virheilmoituksen, joka kehottaa sinua suorittamaan bundle install
.
.