2009-08-11 10 views
14

Estoy tratando de obtener algunas gemas trabajando en un host web que soporte ruby ​​y algunas gemas de rubí, pero no algunas de las que necesito usar.Ruby gema listada, pero no se cargará (gema en dir de usuario, no ruby ​​dir)

Siguiendo las instrucciones que encontré here, me quedé con la ubicación de la gema original en mi camino joya, y añade la mía en/ruta/a/mi/home/gemas a ~/.gemrc

gemhome: /users/home/myuser/gems 
gempath: 
- /usr/local/lib/ruby/gems/1.8 
- /users/home/mysuser/gems 

I descargué algunas gemas manualmente y las instalé usando las opciones --local y --install-dir del comando gem. Luego hice una "lista de gemas", y de hecho puedo ver las gemas que instalé en mi directorio de usuario, así como las gemas originales en la ruta normal del sistema.

Si pateo IRB o hago un rubí -e, todas las gemas del sistema funcionan bien. Sin embargo, no puedo conseguir mi directorio de usuarios gemas instaladas cargado:

$ ruby -r rubygems -e "require 'nokogiri'" 
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__': no such file to load -- nokogiri (LoadError) 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require' 
    from -e:1 

Incluso he intentado la vieja escuela require_gem:

$ irb -r rubygems 
irb(main):001:0> require_gem 'nokogiri' 
Gem::LoadError: Could not find RubyGem nokogiri (> 0.0.0) 

    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:204:in `report_activate_error' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:141:in `activate' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:37:in `require_gem_with_options' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:31:in `require_gem' 
    from (irb):1 

de mi "lista de gemas" Puedo ver:

nokogiri (1.3.3) 
Nokogiri is an HTML, XML, SAX, and Reader parser 

Tengo el mismo problema con todas las gemas de instalación del directorio de usuario. ¿Que me estoy perdiendo aqui?

EDITAR: Esta es no una aplicación de rieles. Esto es para una aplicación de línea de comando. El programa será ejecutado por mi cuenta de usuario, al igual que las pruebas que se muestran arriba en.

EDIT: por sugerencia de Rafe, miré a Gem.path desde IRB. Es solo enumera la ruta de la gema del sistema, /usr/local/lib/ruby/gems/1.8, y no la ruta de mi directorio de usuario también.

+0

¿Qué se muestra cuando solo escribe la expresión "Gem.path" en irb? – Rafe

+1

Ahh, interesante ... ver la edición anterior, – Matt

Respuesta

38

que tenían el mismo problema, lo arreglé añadiendo lo siguiente en la parte superior del rubí presentar

require 'rubygems' 

Espero que ayude

+0

Pasé una hora averiguando cuál es el 'archivo ruby' para agregar esto, ya que tenía una joya con '-rails'. Finalmente lo agregué al archivo rails/rails.rb y mágicamente, funcionó –

0

Imagino que el problema es que la aplicación web no está utilizando la misma configuración que su cuenta de usuario, probablemente porque se está ejecutando como otro usuario. Una opción es cargar las gemas en vendor/gems en su aplicación.

Puede hacerlo en su máquina local usando rake gems:unpack, verifique esas gemas en el control de versiones y luego impleméntelas en el servidor. Es decir, para mí, el enfoque más confiable. Alternativamente, puede cambiar la configuración de su aplicación para buscar gemas en su directorio de inicio.

+0

esto no es una aplicación web en absoluto, no hay raíles, etc. Necesito las bibliotecas de gemas para una aplicación de línea de comandos. – Matt

+0

También se ejecuta una aplicación de comando en el entorno normal de mis usuarios, por lo que los ejemplos anteriores que muestran el error desde la ejecución de la línea de comandos son exactamente el problema. – Matt

+0

Me preguntaba si era una aplicación de Rails. – Rafe

5

Mi trabajo actual (pero menos que ideal) la solución es hacer un

Gem.path.push "/path/to/my/gems" 

digo menos que ideal, porque esto es lo que esperaba el contenido de la .gemrc a hacer por mí de forma automática, para todos ejecuciones ruby ​​bajo el entorno de mis usuarios. No estoy seguro de por qué no lo hace, pero lo anterior al menos funciona.

0

he estado luchando con esto y he determinado que el. gemrc no parece estar cargado en todos los casos. Por ejemplo, es un honor para la instalación de gems, pero no necesariamente cuando se ejecuta irb o script/console.

También encontré que esa ruta al directorio local tenía que ser diferente a la que he visto en muchos sitios. Las siguientes obras para mí:

--- 
gem: --no-ri --no-rdoc 
gemhome: /home/.gem/ruby/1.8 
gempath: 
- /home/.gem/ruby/1.8 
- /usr/lib/ruby/gems/1.8 
0

he tenido un problema similar, pero la respuesta aceptada aquí no parece ser el camino a seguir (por lo menos no era para mí). Si es posible, no debe hacer esto en los archivos gem:

require 'rubygems' 

¿Por qué no pregunta? Mira este artículo: http://tomayko.com/writings/require-rubygems-antipattern

En cualquier caso, que debe estar bien con sólo requiere rubygems '' al llamar IRB:

> irb -r 'rubygems' 

y usted debe tener el mismo resultado. No estoy seguro de por qué para esta pregunta, este método no funciona.

Cuestiones relacionadas