2012-06-21 23 views
10

Dalla seconda volta dell'esecuzione bundle install, le dipendenze vengono caricate da Gemfile.lock finché Gemfile non viene modificato.Cosa succede quando si modifica direttamente Gemfile.lock?

Ma mi chiedo come viene rilevata la modifica tra questi due file.

Per esempio, se io sono l'aggiunta di una nuova dipendenza direttamente in Gemfile.lock senza aggiungere in Gemfile (in contrasto con la migliore pratica in quanto Gemfile.lock è generato automaticamente da Gemfile), sarebbe un bundle install considerare come Gemfile cambiato ?

Effettivamente, il processo bundle install confronta gli interi alberi Gemfile e Gemfile.lock per rilevare le modifiche?

Se lo è, anche se sto aggiungendo una dipendenza direttamente a Gemfile.lock, Gemfile verrebbe rilevato come modificato (poiché diverso) e re-cancellerà Gemfile.lock (quindi perdendo la dipendenza aggiunta ...)

Qual è il processo di bundle install dal momento del lancio per la seconda volta?

Per essere più chiari, la mia domanda è:

sono cambiamenti basati solo Gemfile? Ciò significa che bundler manterrebbe un'istantanea Gemfile di ogni numero di esecuzione N bundle install e la confronta semplicemente con l'esecuzione N + 1 dello bundle install?

Oppure nessun snapshot viene creato nella memoria di bundler e bundler effettua un confronto con Gemfile.lock ogni volta per rilevare se Gemfile deve essere considerato come modificato.

+0

basta eliminare il file Gemlock, inserire le gemme richieste nel file gem ed eseguire 'bundle install'. Questo è tutto. Non penso sia una buona idea pensare molto al file gemlock. ;) – uday

+0

@uDaY Sono d'accordo con te ma sono curioso del processo sotto il cofano dell'installazione di bundle :) – Mik378

+3

Hai letto [questo] (http://gembundler.com/rationale.html) e [questo] (http://gembundler.com/man/bundle-install.1.html)? –

risposta

15

Se modifichi il tuo Gemfile.lock, l'app di Rails dipenderebbe da un'altra versione di gemme ... In questo caso l'integrità del tuo sistema di versioning delle gemme sarebbe interrotta. È una pessima idea modificare direttamente il file Gemfile.lock.

prega, essere un bravo ragazzo e fare offerte con Gemfile solo

1

So che questa domanda è molto vecchio, ma di recente ho avuto a che fare con questo modo che io sto dando la mia risposta. Omniauth è stato recentemente aggiornato alla versione 1.3.2 per correggere un problema di sicurezza. Avevo il compito di aggiornare Omniauth a questa nuova versione con patch, tuttavia, controllando il nostro file Gemfile, mi resi conto che non avevamo quella gemma lì dentro. Quindi ho detto bene, forse posso semplicemente passare la versione su Gemfile.lock dalla 1.3.1 alla 1.3.2. Per farla breve, avrebbe funzionato, ma risulta che non dovevo farlo in quel modo. Quello che ho finito per fare è stato il seguente comando

bundle update omniauth --patch

che ha portato lo stesso cambiamento che stavo per fare manualmente:

- omniauth (1.3.1) 
+ omniauth (1.3.2) 

Detto questo, se si pensa che è necessario apportare modifiche a Gemfile.lock c'è probabilmente un modo per apportare quel cambiamento senza toccare Gemfile.lock stesso. Basta fare bundle --help e probabilmente troverai e l'opzione per fare ciò che stai cercando di ottenere.

Problemi correlati