2011-09-07 10 views
10

Voglio sapere se devo specificare la versione gem per ogni gem che aggiungo a Gemfile o no. In precedenza con alcuni dei miei progetti non ho specificato alcuna versione per tutte le gemme e bundler si è occupata di esso, il che ha funzionato abbastanza bene.Se specificare obbligatoriamente le versioni Gem in Gemfile o non per l'applicazione rails

Ma recentemente ho iniziato a lavorare su pochi progetti in fase di sviluppo da 6 mesi. In quel progetto, molte delle versioni gem sono state specificate solo in Gemfile e Gemfile.lock è stato ignorato. Ciò ha causato molto mal di testa per risolvere definitivamente i conflitti di versione e aggiornare alcune gemme.

ottenuto anche sapere che è cattiva pratica per rimuovere Gemfile.lock dal controllo di versione dell'applicazione - bell'articolo di Yehuda - http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

Quindi, la mia domanda è dovrei specificare la versione per ogni gemma che specifiy in Gemfile o semplicemente specificare il nome e bundler si prenderà cura della versione? Qual è la migliore pratica per gestire questo?

AGGIORNAMENTO -

aggiornamento a questa domanda di specificare correttamente il problema, come Gemfile sovles molti problemi :)

Prob 1 - Ogni sviluppatore dovrebbe avere stessa versione di gemme. In realtà l'aggiunta di Gemfile.lock nel controllo della versione ha risolto questo problema. Gli sviluppatori devono semplicemente fare in modo che eseguano "bundle install"/"bundle" piuttosto che "bundle update" poiché questo aggiornerà anche le versioni.

Prob 2 - La versione di alcune gemme, se modificata, frena il codice dell'applicazione. In realtà con omniauth, ci sono questo tipo di problemi, in quanto le API vengono cambiate da una versione all'altra. E sì, per mantenere il funzionamento dell'applicazione, le versioni dovranno essere specificate per queste gemme.

My Prob. - Quindi, nel mio file gemma, poiché le versioni per A e B sono rigorosamente specificate, e poiché entrambe dipendono da diverse versioni di Z, che è una dipendenza, non riesco nemmeno a eseguire l'installazione del bundle o l'aggiornamento del bundle. L'unica soluzione era rimuovere le versioni e consentire a bundler di rispondere alla chiamata. Ecco perché ho avuto domande come: Gemfile.version_specification_mandatory? # => vero/falso

+0

buona domanda. Questo ha risposto alla mia curiosità anche su questo, come ho specificato le versioni della gemma! – fregas

risposta

2

Se si utilizza la gemma per qualcosa che è disponibile solo in una versione specifica, è necessario specificare la versione.

Bundler installa la versione più recente o utilizza la versione disponibile sul sistema se non è stata specificata alcuna versione. Questo funziona per lo sviluppatore perché l'ultima versione ha la funzione di cui ha bisogno. Ma se la caratteristica si perde nelle versioni future della stessa gemma e la versione non è specificata nel Gemfile, tutte le successive installazioni della gemma per persone diverse o macchine diverse produrranno effetti indesiderati.

Ho affrontato questi problemi in particolare per impaginare le versioni candidate di rilascio di 3.

+0

in realtà se condividi Gemfile.lock allora il problema che hai menzionato sopra non aumenterà. Come sviluppatore prima volta aggiunge gem e esegue 'bundler' quella versione è bloccata e verrà utilizzata da tutti gli sviluppatori di Gemfile.lock. Quello che voglio veramente sapere è - dato che Gemfile.lock è specificamente lì per bloccare la versione, dovremmo ancora specificare le versioni in Gemfile come mandato? – rtdp

6

Penso che sia meglio per non specificare le versioni gem nel Gemfile. In rare occasioni, potrebbe essere necessario specificare una versione, ad esempio quando una versione più recente interrompe la tua app. Ma specificare versioni per tutte le tue gemme è di solito eccessivo. Il file Gemfile.lock (che non si modifica, ma si verifica il controllo della versione) manterrà le nuove versioni di gemme da utilizzare nella propria app, fino a quando non si eseguirà l'upgrade esplicito a tali app.

+0

Sì, sono d'accordo con te Ruder. Aggiorno anche la domanda per cosa esattamente stavo cercando. Grazie. – rtdp

Problemi correlati