2010-02-14 6 views
6

He creado mi primera gema, pero parece que no puedo instalarla correctamente. Puedo emitir el comandogema que no puede encontrar la gema a pesar de estar instalada

sudo gem install ceilingfish-toto 

que produce la salida

Successfully installed ceilingfish-toto-0.3.6 
1 gem installed 

Pero cuando el entonces escribo gem which ceilingfish-toto. Me da la salida

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

que es muy extraño, porque si voy y miro en mis joyas carpeta puedo ver todos los archivos instalados allí

# 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 

¿Alguien sabe lo que podría causar esto? Creo que se está quejando porque hay un guión en el nombre de la gema. Puede ver el gemspec aquí http://github.com/ceilingfish/toto

+0

Bueno, de hecho no hay ningún archivo 'ceilingfish-toto' o biblioteca compartida. – badp

Respuesta

6

gem which ceilingfish-toto examina la ruta de acceso requerida de un archivo llamado techofish-toto.rb. Como no hay uno, no devuelve nada. Lo que funcionaría para usted es gem which toto, pero dado que lib/ no está incluido en su especificación gem, los archivos lib no están instalados, por lo que no existe.

Nueva ejecución de rake gemspec podría solucionar el problema.

Como un lado, puede verificar si una gema está instalada por su nombre usando gem list ceilingfish-toto que debería mostrarle que está instalado, independientemente de los archivos que tenga (también listará las versiones instaladas).

+0

Para 'lista de gemas', use _-d_ para "detalles": 'gema lista -d techofish-toto' para ver dónde está instalado. –

-1

OK, por lo que el problema aquí parece ser que había un problema con mi archivo gemspec. Por lo que puedo decir, tiene que haber un archivo con el nombre lib/gem-name.rb, así que en este caso necesitaba lib/ceilingfish-toto.rb.

Esto no parece ser cierto para que algunas gemas funcionen correctamente. Por ejemplo, mime-types o rest-client, aunque no aparezcan con gem which, realmente funcionan.

No estoy seguro de que esto es del todo correcto, sin embargo, estoy seguro de que debe haber una manera de conseguir una joya con un guión en el nombre que se comporten correctamente. Si descubro que publicaré y les sabré a todos.

7

No es el guión.

gem which busca archivos de biblioteca en gemas, no gemas. Compare:

$ 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. Tenga en cuenta la existencia de 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 

No hay lib/rails.rb. Pero trata de:

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

Así gem which ceilingfish-toto genera un error, incluso cuando está instalado ceilingfish-toto porque no hay lib/ceilingfish-toto.rb archivo (no hay ni siquiera una carpeta lib).

Cuestiones relacionadas