2010-12-14 4 views
19

Scenario: Sto sviluppando una gemma gem-foo, utilizzando Bundler. Ho una dipendenza su gem-bar, che ho verificato in locale per lo sviluppo. Posso dichiarare questa dipendenza nella Gemfile come:Come posso utilizzare la regola "gemspec" in Bundler, mentre utilizzo ancora un checkout locale di una gemma?

gem "gem-bar", :path => "/path/to/local/gem-bar" 

Tuttavia, quando si sviluppa un gioiello della "best practice" sembra essere quello di definire le gemme richiesti nel gem-foo.gemspec via:

s.add_runtime_dependency 'gem-bar' 

e poi semplicemente includere le dipendenze nel Gemfile utilizzando:

gemspec 

Quello che vorrei fare è aggiungere la dipendenza runtime sulla gemma nel gemspec, ma apportare alcune modifiche locali a gem-bar e un bundle install utilizzare il checkout di sviluppo locale. Supponiamo che io controlli entrambe le gemme e vi stia intromettendo un po 'simultaneamente, e spingo le nuove versioni simultaneamente. I potrebbe solo commentare il s.add_runtime_dependency nel gemspec e aggiungerlo con il percorso locale nel Gemfile, ma che si sente ... incline agli errori? La gemspec dovrebbe dichiarare questa dipendenza sempre e Gemfile dovrebbe essere in grado di sovrascrivere la posizione che Bundler dovrebbe utilizzare per la gemma. Tuttavia, se effettivamente esegue questa operazione, si ottiene il seguente errore:

You cannot specify the same gem twice coming from different sources. You specified that gem-bar (>= 0) should come from an unspecfied source and source at /path/to/local/gem-bar

Idealmente, vorrei solo hanno una sorta di esclusione locale, dal momento che non voglio mai il caso in cui spingo accidentalmente il gioiello con l'esigenza di un locale gem-bar in un percorso specifico. Sarebbe stupido.

Qualcuno ha una buona soluzione a questo caso d'uso?

risposta

15

Alcune persone hanno trovato questo problema, Yehuda Katz ha detto che avrebbe felicemente accettare una patch: http://groups.google.com/group/ruby-bundler/browse_thread/thread/d4215c4930a63ffc?pli=1

Come il miglior soluzione, commentare la riga gemspec nel Gemfile e soffrire alcuni doppioni?

Aggiornamento:

Sembra che tu non c'è bisogno di aspettare - https://github.com/carlhuda/bundler/commit/03378109d

Il messaggio di commit: "Rendere possibile ignorare la fonte di una dipendenza .gemspec nel Gemfile"

evviva!

2

Per ora, quello che ho fatto è quello di disabilitare i requisiti gemma nel gemspec quando è impostata una data variabile ambiente, poi nel Gemfile, aggiungere una definizione gemma che punta al mio filesystem locale.

Ho scritto di tutto il mio flusso di lavoro qui: http://numbers.brighterplanet.com/2010/07/28/bundler-to-the-max/ Nota: uso anche il gioielliere, che complica notevolmente le cose.

1

Ragazzo! Non ci arrivo mai in tempo, vero? Prova le opzioni di Bundler come - qualcosa che non riesco a ricordare.

+0

Per installare su "fornitore/pacchetto", fare 'bundle install --path vendor/bundle'. Una volta installato lì e hai un Gemfile.lock, puoi anche usare 'bundle install --deployment' per ambienti non di sviluppo. – Brett

+0

Ok! Questo è quello che ricordo. Grazie. Ero stanco quando l'ho pubblicato e l'ho usato solo poche volte. Sto solo indagando su Rbenv in questi giorni. Sembra essere abbastanza semplice. Yehuda Katz ha scritto alcune cose piuttosto buone su quale strada prendere con questo problema. Le migliori pratiche come lo sviluppo di gemme e tutto. –

Problemi correlati