Domanda

C'è un modello comune:

ci sono molti sviluppatori che lavorano su un progetto e l'Gemfile (.lock) è condiviso tramite SCM. Ma cosa succede se alcuni sviluppatori vogliono utilizzare diversi strumenti per testare e lo sviluppo? Come fare?

Il problema è che quando si mette sezioni condizionali al vostro Gemfile, anche il Gemfile.lock sarà diverso per ogni sviluppatore e per questo si otterrà un conflitto ogni volta che si impegnano a SCM.

C'è qualche soluzione semplice e ampiamente riconosciuto?

È stato utile?

Soluzione 6

Credo che il metodo install_if (aggiunta di recente) risolve il problema:

install_if -> { `whoami`.strip == 'jakub' } do
  gem "pry-rails"
end

http://bundler.io/v1.14/ uomo / gemfile.5.html # INSTALL_IF

Altri suggerimenti

mi piace avere questo nel mio Gemfile:

local_gemfile = File.dirname(__FILE__) + "/Gemfile.local"
if File.file?(local_gemfile)
  require local_gemfile
end

Ho anche Gemfile.local e Gemfile.lock in gitignore. So che non sto "dovuto", ma non credo che i caveat (come quelle di cui parli nella tua domanda) sono vale la pena.

Aggiornamento per Bundler 1.0.10 a partire dal 3 marzo 2011

local_gemfile = File.dirname(__FILE__) + "/Gemfile.local.rb"
if File.file?(local_gemfile)
  self.instance_eval(Bundler.read_file(local_gemfile))
end

Ho dovuto usare questo con Rails 3 e Bundler 1.0.10.

Se si controlla in qualcosa che dipende da una gemma che gioiello dovrebbe essere nella Gemfile. Se il codice nel repository non dipende da una gemma, non c'è bisogno di avere nel Gemfile. Quindi, a meno che gli sviluppatori non controllano nelle loro prove (che sarebbe strano) si avrebbe bisogno di tutte le dipendenze della prova, se si desidera eseguire l'intera suite di test in ogni caso.

Se le gemme non sono necessari per eseguire l'applicazione o le sue prove le gemme non hanno bisogno di essere in Gemfile. Basta avere ogni sviluppatore di creare un GemSET (presumo che si sta utilizzando RVM, se non si dovrebbe) per l'applicazione e installare tutto ciò di cui hanno bisogno lì, e poi basta aggiungere quali sono le esigenze delle applicazioni di funzionare a Gemfile.

È possibile utilizzare la bandiera without di Bundler per escludere gruppi.

Se avete il seguente Gemfile

group :jakubs_testing_tools do
  gem "rspec"
  gem "faker"
end

È possibile escluderli con bundle install

$ bundle install --without jakubs_testing_tools

http://gembundler.com/groups.html

E non ti aiuta in questo momento, ma c'è stato un open richiesta di funzionalità per Bundler per aggiungere il supporto per un Gemfile.local per le età. E 'previsto un posto nella serie 1.x, quindi rimanete sintonizzati.

Se il problema principale è gemme IRB-specific di sviluppo, ci sono un paio di soluzioni alternative in tema di commenti .

Ogni sviluppatore può creare il proprio ramo - Bundler funziona bene con diversi rami avere contenuti diversi Gemfile. E 'una buona idea per gli sviluppatori di nomi filiali prefisso con le loro iniziali, alla confusione, evitare o collisioni.

(in pratica la stessa idea come nel commento di August Lilleaas: gitignore)

Mettere il default / minimal Gemfile in SCM e quindi hanno gli sviluppatori cambiano sui loro sistemi e mai commettere. Li hanno aggiungerlo alla loro changeset inattivi nel loro client SVN (se usano uno), altri SCM dovrebbero avere qualcosa di simile.

Questo è il modo in cui facciamo nella mia azienda - funziona davvero bene:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top