2013-08-20 14 views
5

Ho una gemma chiamata "qualcosa".Come aggiungere "leva" quando si sviluppa una gemma Ruby

Vorrei sviluppare la gemma come dipendenza dallo sviluppo. Tuttavia non so come caricarlo.

Se ho "require qualcosa" in lib/something.rb, quando rilascio la gem, genera un LoadError, perché la leva è solo una dipendenza di sviluppo.

Allo stesso tempo, non voglio continuare ad aggiungere e rimuovere la leva quando sto eseguendo il codice.

Qual è il modo migliore per richiedere la leva solo durante lo sviluppo dell'applicazione, ma non per la dipendenza dalla gemma?

+0

Domanda simile, ma nessuna risposta: http://stackoverflow.com/questions/18109735/use-pry-in-gems-without-modifying-the-gemfile-or-using-require?rq=1 –

+1

Forse prendere in considerazione quale contesto stai eseguendo il codice che necessita di leva. Se proviene da specifiche, inserisci la richiesta in 'spec_helper.rb' (o equivalente). Se proviene da un'attività di rake, inseriscila nel 'Rakefile'. Se proviene da uno script raw, inseriscilo o caricalo dagli argomenti della riga di comando con 'ruby -rpry' –

risposta

3

È possibile utilizzare add_development_dependency nel file gemspec. Dovrai comunque effettuare il require nel tuo file lib/something.rb all'interno di un blocco begin .. rescue LoadError. (Modifica 2, vedi sotto)

Nel tuo caso, sarà qualcosa di simile al seguente:

spec.add_development_dependency 'pry', '~> 0.9.12.2' 

Lo scopo di add_development_dependency è quello di separare le gemme in dipendenze che vengono installati quando si esegue gem install mygem vs dipendenze dello sviluppo solo installate solo quando si esegue gem install mygem --development.

Edit: @ soluzione di Pierre-Louis Gottfrois'

Modificare il Gemfile direttamente e aggiungere un gruppo test. This question descrive il processo. Questo non sembra essere una soluzione preferita secondo Yehuda Katz.

Modifica 2: begin require ... rescue LoadError è apparentemente una pratica comune per gli script Ruby, secondo questo articolo Making Ruby Gems.

+1

Questo funziona perfettamente ed è la strada da percorrere, tuttavia non funzionerà su test env. Dovrai aggiungere direttamente la gemma in un gruppo 'test' nel' Gemfile'. –

+0

Tuttavia, quando rilasciamo la gemma in produzione, ho ancora questo "bisogno di leva" in lib/something.rb, ma "pry" è ora mancante in quanto è una dipendenza di sviluppo. Prima di rilasciare dovrei rimuovere "require pry" se ho capito bene ... questo è esattamente quello che voglio evitare. –

+0

@antonevangelatov Forse provare un 'obbligatorio' condizionale in un blocco' begin .. rescue LoadError'?Qualcosa come [questa domanda] (http://stackoverflow.com/questions/1835927/conditional-dependency-in-ruby-gemspec) –

0

Penso di aver trovato una soluzione per questo. Se si configura bundler da utilizzare pry come console con

$ bundle config console pry

Poi pry è a sua volta richiesto e non c'è bisogno di chiedere in modo esplicito nei file di origine.
Inoltre, si ottiene una cronologia premendo '↑'.

Problemi correlati