Ciascuno di essi è stato sviluppato da diversi team in momenti diversi e viene utilizzato da software diversi.
L'elenco di una versione in rubino nel file Gemfile è feature in bundler.
Dato che Gemfile viene utilizzato principalmente da bundler, per lo più funziona solo con il bundler - utilizzando bundle exec
o software (come Rails) che attiva automaticamente il bundler per te. Il suo effetto è semplicemente quello di commettere errori e rifiutarsi di eseguire se non si sta utilizzando la versione di ruby specificata. È un requisito: corri sotto questo rubino, o ti lascio un errore che ti avverte che stai correndo sotto il rubino sbagliato.
Tuttavia, heroku also pays attention alla versione specificata nel Gemfile e verrà eseguito con quella versione. Heroku ha deciso di usare la funzione anche in bundler. Ma la maggior parte degli altri software, sulla tua workstation, o anche travis, non usa quella convenzione. (Travis ti permette di modificare il tuo .travis.yml ENV per specificare la versione ruby da usare).
La caratteristica in Bundler è stato introdotto nel Bundler 1.2 nel mese di agosto 2012.
Il file .ruby-version è stato introdotto da rvm, la prima versione del direttore rubino. Se si utilizza rvm e si passa a una direcotry di progetto con un file .ruby-version
, rvm passerà automaticamente alla shell utilizzando la versione ruby specificata.
Non sono sicuro di quando rvm ha introdotto questa funzione, ma penso prima della funzione "ruby" di Gemfile.
Dal rvm introdusse, altra versione rubino software come rbenv e chruby commutazione hanno adottato troppo a fare la stessa cosa - passare alla versione ruby specificato quando si cd
nella directory automaticamente. Anche se penso con rbenv e chruby, potrebbe essere una caratteristica opzionale.
Quindi erano diverse funzionalità introdotte e supportate da diversi pacchetti software in momenti diversi, facendo cose un po 'diverse.
Sono d'accordo che sarebbe noioso mantenere entrambi e mantenerli sincronizzati.
Sono entrambi effettivamente opzionali, non è necessario utilizzare uno dei due. Tranne che potresti aver bisogno di usare le specifiche del rubino Gemfile per heroku, per dire quale rubino vuoi che funzioni.
Non uso personalmente neanche. Ma se hai bisogno di lavorare in diverse versioni di ruby in diversi progetti e trovi conveniente avere il tuo gestore di versioni ruby (rvm, rbenv o chruby) passa automaticamente alla versione ruby specifica del progetto, .ruby-version
potrebbe essere utile.
Tranne che per scopi heroku, l'elenco di ruby nel file Gem è principalmente per evitare di commettere un errore, ad esempio per la distribuzione. O forse una distribuzione automatizzata interna o un ambiente CI potrebbe usarli in qualche modo come fa heroku, o forse altri stack di distribuzione cloud lo avranno o l'avranno adottato. Penso che molti l'abbiano trovato non troppo utile - anche questo, non lo userei fino a quando non incontrerai o vedrai un problema che sta risolvendo. Un inconveniente che alcune persone hanno con l'elencare le versioni in Ruby in Gemfile è che con i nuovi rubini che escono sempre, devi aggiornare continuamente tutti i tuoi Gemfile.
In generale, gli ultimi due anni di release di ruby sono stati tutti molto compatibili con le versioni precedenti, limitando la necessità di essere sicuri di utilizzare una versione esatta di ruby, il codice più recente verrà eseguito sul rubino più recente, anche se è stato originariamente scritto per uno più vecchio.
Non credo che nessuna funzione ti permetta di specificare una gamma di versioni di rubini, come 2.2.*
o cosa hai.
Con una o entrambe le funzioni, usale solo se ne hai bisogno o le trovi utili, non devi nemmeno usarle, ed è bello (se fastidioso) usare entrambe, se hai bisogno di entrambi.
Poiché un Gemfile è un codice rubino in tempo reale, è possibile che il proprio Gemfile legga il file .ruby-version
e utilizzi automaticamente tale valore come valore Gemfile ruby
. Se volevi usare entrambi e "non ripeterti" con esso. Non so se è una cosa comune da fare, ci ho pensato. Ma dovrebbe funzionare bene.
Penso che non è necessario specificare la versione rubino nel vostro Gemfile a tutti . –
Afaik '.ruby-version' imposta la versione Ruby per RVM o rbenv, ma Heroku ad esempio prende la versione Ruby dal Gemfile ([fonte] (https://devcenter.heroku.com/articles/ruby-versions)) . – spickermann
Grazie a @spickermann, sembra che sia una buona idea avere entrambi. – Todd