make instalar guides gemas actualizar ruby rubygems

ruby - instalar - Tengo una joya instalada pero necesito que ''gemname'' no funcione. ¿Por qué?



ruby 23 (10)

La pregunta que realmente estoy preguntando es por qué require no toma el nombre de la gema. Además, en el caso de que no lo haga, ¿cuál es la forma más fácil de encontrar el encantamiento secreto para exigir la maldita cosa?

Como ejemplo, si tengo instalado memcache-client entonces tengo que requerirlo usando

require ''rubygems'' require ''memcache''


Debe incluir "rubygems" solo si instaló la gema usando gema . De lo contrario, el encantamiento secreto sería disparar irb y probar diferentes combinaciones. Además, puede pasar la opción -I al intérprete de ruby ​​para que incluya el directorio de instalación de la gema en LOAD_PATH . Tenga en cuenta que $ LOAD_PATH es una matriz, lo que significa que puede agregarle directorios desde su script.


El requerido tiene que mapear a un archivo en la ruta de Ruby. Puede averiguar dónde se instalan las gemas ejecutando ''gem environment'' (busque DIRECTORIO DE INSTALACIÓN):

kburton@hypothesisf:~$ gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.2.0 - RUBY VERSION: 1.8.7 (2008-08-08 patchlevel 71) [i686-linux] - INSTALLATION DIRECTORY: /usr/local/ruby/lib/ruby/gems/1.8 - RUBY EXECUTABLE: /usr/local/ruby/bin/ruby - EXECUTABLE DIRECTORY: /usr/local/ruby/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /usr/local/ruby/lib/ruby/gems/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://gems.rubyforge.org/ kburton@editconf:~$

Luego puede buscar el archivo .rb particular que está intentando requerir. Además, puede imprimir los contenidos de $: desde irb para ver la lista de rutas que ruby ​​buscará en los módulos:

kburton@hypothesis:~$ irb irb(main):001:0> $: => ["/usr/local/ruby/lib/ruby/site_ruby/1.8", "/usr/local/ruby/lib/ruby/site_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/site_ruby", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8", "/usr/local/ruby/lib/ruby/vendor_ruby/1.8/i686-linux", "/usr/local/ruby/lib/ruby/vendor_ruby", "/usr/local/ruby/lib/ruby/1.8", "/usr/local/ruby/lib/ruby/1.8/i686-linux", "."] irb(main):002:0>


No existe un estándar para el archivo que necesita incluir. Sin embargo, hay algunas convenciones comúnmente seguidas que puede seguir y utilizar:

  • A menudo, el archivo se llama el mismo nombre que la gema. Entonces require mygem funcione.
  • A menudo, el archivo es el único archivo .rb en el subdirectorio lib de la gema, por lo que si puede obtener el nombre de la gema (tal vez esté iterando a través de proveedores / gemas en un proyecto de rieles pre 2.1), entonces puede inspeccionar #{gemname}/lib para archivos .rb, y si solo hay uno, es una apuesta bastante buena que es la que requiere

Si todo eso funciona, entonces todo lo que puedes hacer es buscar en el directorio de las gemas (que puedes encontrar ejecutando gem environment | grep INSTALLATION | awk ''{print $4}'' y buscando en el directorio lib, probablemente necesites leer los archivos y espero que haya un comentario explicando qué hacer


Yo también tuve este problema desde la instalación de OS X Lion, y descubrí que incluso si ejecutara el siguiente código, igual recibiría el mensaje de advertencia. require ''rubygems'' require ''nokogiri''

Intenté un montón de soluciones publicadas aquí y en la web, pero al final mi solución de trabajo fue simplemente seguir las instrucciones en http://martinisoftware.com/2009/07/31/nokogiri-on-leopard.html para volver a instalar LibXML y LibXSLT desde el origen, pero asegurando que la versión de LibXML que instalé coincidía con la que esperaba Nokogiri.

Una vez que hice eso, las advertencias desaparecieron.


Tuve este problema porque uso rvm y estaba tratando de usar la versión incorrecta de ruby. ¡La gema en cuestión necesitaba 1.9.2 y yo había establecido 2.0.0 como mi predeterminado! Tal vez sea un error tonto, pero que alguien que llegue a esta página probablemente haya hecho.


También los rieles deberían recordar reiniciar el servidor de rieles después de instalar una gema


Un problema con el que me topé fue que la gema construida realmente no incluía todos los archivos que debería tener.

El problema con los files era que había un error de sintaxis en el en gemspec, pero no se lanzaron errores durante la compilación.

Solo agregue esto aquí en caso de que alguien más se encuentre con el mismo problema.


Mire la fuente de la gema y revise el directorio de lib . Si no hay un archivo rb , debe apuntar al archivo rb principal de gem en el subdirectorio:

require ''dir/subdir/file''

para /lib/dir/subdir/file.rb .


La pregunta que realmente estoy preguntando es por qué require no toma el nombre de la gema.

Instalar una gema lleva los archivos a su sistema. No hace ningún reclamo sobre cómo se llamarán esos archivos.
Como laurie señala, hay varias convenciones para la forma en que se nombran, pero no hay nada que haga cumplir eso, y muchos autores de gemas desafortunadamente no se apegan a ellos.

Además, en el caso de que no lo haga, ¿cuál es la forma más fácil de encontrar el encantamiento secreto para exigir la maldita cosa?

Lee los documentos de tu joya?
Encuentro Google para rdoc gemname generalmente encontrará los rdocs oficiales para su gema , que generalmente le muestran cómo usarlo.

Memcache quizás no sea el mejor ejemplo, ya que suponen que lo utilizará desde los rieles, y el ''requerir'' ya habrá sido hecho por usted, pero la mayoría de los otros que he visto tienen ejemplos que muestran el ''requerimiento'' correcto conjuros


Mi sistema tampoco parece saber sobre la existencia de RubyGems, a menos que yo lo diga. El comando ''require'' es sobreescrito por RubyGems para que pueda cargar gemas, pero a menos que tengas RubyGems ya requerido no tiene idea de cómo hacerlo. Entonces, si estás escribiendo el tuyo, puedes hacer:

require ''rubygems'' require ''gem-name-here''

Si está ejecutando el código de otra persona, puede hacerlo en la línea de comando con:

ruby -r rubygems script.rb

Además, hay una variable de entorno que Ruby usa para determinar qué debe cargar al iniciarse:

export RUBYOPT=rubygems

(de http://www.rubygems.org/read/chapter/3 . La variable de entorno me fue señalada por Orion Edwards )

(Si "requerir" rubygems "no funciona para usted, sin embargo, este consejo es de ayuda limitada :)