Aktualizace závislosti
V určitém okamžiku můžete samozřejmě chtít aktualizovat verzi určité závislosti, na které vaše aplikace závisí. Například můžete chtít aktualizovat rails
na 3.0.0
final. Důležité je, že jen proto, že aktualizujete jednu závislost, neznamená to, že chcete znovu vyřešit všechny závislostia používat nejnovější verzi všeho. V našem příkladu máte pouze třizávislosti, ale i v tomto případě může aktualizace všeho způsobit komplikace.
Pro ilustraci: gem rails 3.0.0.rc
závisí na gemu actionpack 3.0.0.rc
, který závisí na gemu rack ~> 1.2.1
(což znamená, že >= 1.2.1
a ). The
rack-cache
gem závisí narack >= 0.4
. Předpokládejme, že finální gem rails 3.0.0
závisí také na rack ~> 1.2.1
a že od vydání gemu rails 3.0.0
tým Rack vydal gem rack 1.2.2
.
Pokud naivně aktualizujeme všechny naše gemy, abychom aktualizovali Rails, získáme gem rack 1.2.2
, který splňuje požadavky gemů rails 3.0.0
irack-cache
. Nepožádali jsme však výslovně o aktualizacirack-cache
, která nemusí být kompatibilní s rack 1.2.2
(ať už z jakéhokoli důvodu). A zatímco aktualizace z rack 1.2.1
na rack 1.2.2
pravděpodobně nic neporuší, mohou nastat podobné scénáře, které zahrnujídaleko větší skoky. (širší diskuse viz níže)
Aby se tomuto problému předešlo, nebude bundler při aktualizaci gemu aktualizovat závislost tohoto gemu, pokud na něm stále závisí jiný gem. V tomto příkladu, protožerack-cache
stále závisí na rack
, nebude bundler gemrack
aktualizovat. Tím je zajištěno, že aktualizace rails
nechtěně nerozbije rack-cache
. Protože závislost rails 3.0.0
actionpack 3.0.0
zůstává kompatibilní s rack 1.2.1
, bundler ji ponechá na pokoji a rack-cache
bude nadále fungovat i přes nekompatibilitu s rack 1.2.2
.
Protože jste původně deklarovali závislost na rails 3.0.0.rc
, pokud chceteaktualizovat na rails 3.0.0
, jednoduše aktualizujte svůj Gemfile
nagem 'rails', '3.0.0'
a spusťte:
$ bundle install
Jak je popsáno výše, příkaz bundle install
vždy provede konzervativníaktualizaci a odmítne aktualizovat drahokamy (nebo jejich závislosti), které jste explicitněnezměnili v Gemfile
. To znamená, že pokud ve svém Gemfile
nezměníterack-cache
, bude s ním **a jeho závislostmi** (rack
) bundler zacházet jako s jedinou, nemodifikovatelnou jednotkou. Pokud by rails 3.0.0
byla nekompatibilní s rack-cache
, bundler ohlásí konflikt mezi vašimi závislostmi na snímku (Gemfile.lock
) a aktualizovanými Gemfile
.
Pokud aktualizujete Gemfile
a váš systém již obsahuje všechny potřebné závislosti, bundler transparentně aktualizuje Gemfile.lock
při spuštění aplikace. Pokud například přidáte mysql
do svého Gemfile
a máte jej již nainstalovaný ve svém systému, můžete spustit svouaplikaci bez spuštění bundle install
a bundler zachová „poslední známou dobrou“ konfiguraci do snímku Gemfile.lock
.
To se může hodit při přidávání nebo aktualizaci drahokamů s minimálními závislostmi (databázové ovladače, wirble
, ruby-debug
). Pravděpodobně selže, pokud budeteaktualizovat gemy s významnými závislostmi (rails
) nebo na kterých závisí mnoho gemů (rack
). Pokud transparentní aktualizace selže, aplikace se nespustí a bundler vypíše chybu s pokynem ke spuštění bundle install
.
.