2010-09-20 11 views
5

Mi chiedo come rendere accessibile una gemma in un'app Rails 3 senza averne un riferimento nel gemfile. Voglio farlo con Ruby-Debug (sto usando ruby-debug19). Lo uso per eseguire il debug, ma non tutti nella mia squadra lo fanno e costringendo la dipendenza solo per poterlo usare non sembra molto diplomatico. C'è un altro modo?Come utilizzare una gemma in Rails 3 senza farvi riferimento nel Gemfile

Se finisce importando, sto usando Rails3, Bundler 1.0.0, Ruby 1.9.2, RVM, OSX Snow Leopard

Su un lato nota, avevo pensato di usare la funzione di gruppo Gemfile, ma anche questo non sembra giusto. I gruppi sembrano grandiosi per cose come factory_girl in cui esiste una dipendenza reale anche se solo in ambienti specifici, ma con il deby-debug non c'è bisogno di essere lì a meno che non si voglia usarlo.

+0

Sono determinato a capirlo da solo, e condividerò se lo farò. IMO Bundler è la cosa peggiore che sia mai capitata a Rails. – bioneuralnet

risposta

2

AFAIK non è possibile perché Rails 3 isola le gemme del sistema.

Il mio suggerimento è di aggiungere la gemma nel Gemfile con l'opzione :require => false in modo che sia inclusa, installata ma mai caricata. Quindi, nella tua app, richiedi la gemma manualmente.

Oppure puoi provare a raggrupparlo nel tuo progetto, all'interno della cartella del venditore (dovrebbe esserci una cartella per Gem) e ignorare la cartella gem specifica nel tuo SCM in modo che i tuoi collaboratori non siano interessati.

+0

Grazie per il suggerimento. Mi dispiacerebbe davvero persino richiedere l'installazione della gemma.L'installazione di questo particolare gioiello non è sempre semplice e il comando 'bundle install' è quindi soggetto a errori come risultato :(. –

3

Questo è davvero brutto e non tirarlo fuori della vostra Gemfile, ma faccio questo nel mio Gemfile in modo da poter utilizzare 2 diverse fonti per una gemma in ambienti diversi:

if ENV['MY_RDEBUG_VAR'] == "i_want_to_use_rdebug" 
    gem "ruby-debug" 
end 

Basta fare una variabile di ambiente oscura che solo tu avresti impostato sul tuo sistema. In questo modo, i tuoi colleghi non avranno il set di env var e la gemma non verrà mai installata o caricata per loro.

0

Ho finito per aggiungere il seguente codice a un inizializzatore di rotaie e ignorarlo nel file .git/info/exclude.

$: << Bundler.bundle_path.join("gems", "ruby-debug19-0.11.6", "cli") 
$: << Bundler.bundle_path.join("gems", "ruby-debug-base19-0.11.24", "lib") 
$: << Bundler.bundle_path.join("gems", "linecache19-0.5.11", "lib") 
$: << Bundler.bundle_path.join("gems", "columnize-0.3.1", "lib") 
require 'ruby-debug' 

Anche se questo funziona, non so se qualcuno dovrebbe effettivamente fare questo, accettando il fatto che queste dipendenze devono essere collocati nel file gemma è probabilmente la cosa migliore.

+0

Utilizzare questa soluzione a proprio rischio.Penso che abbia smesso di funzionare per me in un successivo versione di RVM .Oggi al giorno aggiungo il ruby-debug al gruppo di sviluppo nel mio gemfile. –

0

Questa è la mia soluzione a utilizzare ruby_debug sia con rubino 1,8 e 1,9

if RUBY_VERSION.include?('1.9') 
    ruby_debug = 'ruby-debug19' # new branch for ruby-debug that supports 1.9 
else 
    ruby_debug = 'ruby-debug' 
    gem 'fastercsv' # ruby 1.9 bundles FasterCSV now 
end 


group :test do 
    gem 'webrat' 
    gem "factory_girl" 
    gem 'shoulda' 

    # gem 'redgreen' 
    gem 'autotest-rails' 
    gem 'autotest-fsevent' 
    gem 'autotest' 
    gem ruby_debug 
end 

group :development do 
    gem ruby_debug 
end 
0

So che questo non copre alcuni altri casi in cui sarebbe bello se ci fosse un modo pulito per ottenere questo risultato - - autotest-growl e autotest-fsevent mi vengono in mente, oltre a molte cose che richiedo/salvataggio nel mio .irbrc per un'esperienza migliore che non voglio forzare su tutti, come wirble e hirb - ma in particolare per ruby-debug, lo ruby-debug-wrapper gem è utile se testare contro più versioni di Ruby fa parte del tuo dolore.

Se si vuole evitare di installare qualsiasi versione di ruby-debug, penso opzioni Altri hanno suggerito sono gli unici modi attualmente.

Problemi correlati