2010-02-14 2 views
6

Ho costruito la mia prima gemma ma non riesco a farla installare correttamente. Posso eseguire il comandogemma che non riesce a trovare gemma nonostante sia stata installata

sudo gem install ceilingfish-toto 

che produce l'uscita

Successfully installed ceilingfish-toto-0.3.6 
1 gem installed 

Ma quando ho quindi digitare gem which ceilingfish-toto. Ho l'uscita

Can't find ruby library file or shared library ceilingfish-toto 

che è molto strano perché se vado e guardo le mie gemme cartella posso vedere tutti i file installati non

# ls -l /opt/local/lib/ruby/gems/1.8/gems/ceilingfish-toto-0.3.6/ 
total 48 
-rw-r--r-- 1 root admin 1053 14 Feb 17:16 LICENSE 
-rw-r--r-- 1 root admin 6166 14 Feb 17:16 README.md 
-rw-r--r-- 1 root admin 879 14 Feb 17:16 Rakefile 
-rw-r--r-- 1 root admin  6 14 Feb 17:16 VERSION 
-rw-r--r-- 1 root admin 2477 14 Feb 17:16 ceilingfish-toto.gemspec 
drwxr-xr-x 7 root admin 238 14 Feb 17:16 test 

Qualcuno sa cosa potrebbe causare questo? Penso che si lamenti perché c'è un trattino nel nome della gemma. Potete vedere la gemspec qui http://github.com/ceilingfish/toto

+0

Beh, in effetti non esiste un file 'ceilingfish-toto' o una libreria condivisa. – badp

risposta

6

gem which ceilingfish-toto gli sguardi attraverso la gemma richiedono il percorso per un file denominato ceilingfish-toto.rb. Poiché non ce n'è uno, non restituisce nulla. Quello che potrebbe funzionare per voi è gem which toto, ma dal momento che lib/ non è incluso nella specifica della gemma, i file lib non sono installati, quindi non esiste.

La ripetizione di rake gemspec potrebbe risolvere il problema.

Come nota a parte, è possibile verificare se un gioiello viene installato con il suo nome utilizzando gem list ceilingfish-toto che dovrebbe mostrare che è installato, indipendentemente dai file che ha (verrà elencato anche le versioni installate).

+0

Per "elenco gemme", utilizzare _-d_ per "dettagli": 'gem list -d ceilingfish-toto' per vedere dove è installato. –

-1

OK, quindi il problema qui sembra essere che c'era un problema con il mio file gemspec. Da quello che posso dire deve esserci assolutamente un file con il nome lib/gem-name.rb quindi in questo caso avevo bisogno di lib/ceilingfish-toto.rb.

Questo non sembra essere vero per alcune altre gemme per funzionare correttamente. Ad esempio mime-types o rest-client, anche se non vengono visualizzati con gem which, funzionano effettivamente.

Non sono sicuro che questo sia completamente corretto, sono sicuro che ci dovrebbe essere un modo per ottenere un gioiello con un trattino nel nome per comportarsi correttamente. Se lo scoprirò, lo pubblicherò e lo farò sapere.

7

Non è il trattino.

gem which ricerche di file di libreria in gemme, non gemme. Confronta:

$ gem which haml 
/home/dave/.gem/ruby/1.8/gems/haml-3.0.12/lib/haml.rb 
$ ls haml-3.0.12/lib/h* 
haml haml.rb haml.rbc 

Peachy. Notare l'esistenza di lib/haml.rb.

$ gem which rails 
ERROR: Can't find ruby library file or shared library rails 
$ ls rails-2.3.8/lib/r* 
rails_generator.rb railties_path.rb rubyprof_ext.rb ruby_version_check.rb 

Non c'è lib/rails.rb. Ma provate:

$ gem which railties_path # not a gem 
/home/dave/.gem/ruby/1.8/gems/rails-2.3.8/lib/railties_path.rb 

Così gem which ceilingfish-toto genera un errore anche quando ceilingfish-toto è installato perché non c'è lib/ceilingfish-toto.rb di file (non c'è nemmeno una cartella lib).