Son rubí modificadores de línea de comandos -rubygems & -r incompatibles?

StackOverflow https://stackoverflow.com/questions/124035

  •  02-07-2019
  •  | 
  •  

Pregunta

Recientemente he convertido un rubí de la biblioteca a una joya, que parecía romper la línea de comandos de usabilidad

Funcionaba como una biblioteca

  $ ruby -r foobar -e 'p FooBar.question' # => "answer"

Y como una joya, el irb sabe cómo solicitar una gema de modificadores de línea de comandos

  $ irb -rubygems -r foobar
  irb(main):001:0> FooBar.question # => "answer"

Pero la misma falla por ruby sí mismo:

  $ ruby -rubygems -r foobar -e 'p FooBar.question'
  ruby: no such file to load -- foobar (LoadError)

debo ahora hacer esto, que parece feo:

  ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer"

O hay una manera de hacer que los 2 interruptores de trabajo?

Nota:Sé que la joya podría añadir un bin/programa para cada método útil, pero no me gusta contaminar la línea de comandos de espacio de nombres innecesariamente

¿Fue útil?

Solución

-rubygems es de hecho la misma -r ubygems.

No se metan con su ruta de búsqueda, tal y como yo lo entiendo, pero creo que no aporta nada a su -r ruta de búsqueda de cualquiera.Yo era capaz de hacer algo como esto:

ruby -rubygems -r /usr/lib/ruby/gems/myhelpfulclass-0.0.1/lib/MyHelpfulClass -e "puts MyHelpfulClass"

MyHelpfulClass.rb existe en el directorio lib de lo especificado anteriormente.

Que tipo de mierda, pero al menos demuestra que puede tener múltiples -r equire directivas.

Como un poco menos feo solución, puede agregar elementos adicionales para el rubí ruta de búsqueda de biblioteca (delimitada por dos puntos en *nix, delimitado por punto y coma en windows).

export RUBYLIB=/usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib
ruby -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"

Si usted no quiere meterse con la variable de entorno, se puede añadir algo a la trayectoria de la carga a sí mismo:

ruby -I /usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib \
   -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"

Otros consejos

Nota:este problema existe para ruby 1.8, pero se resuelve en ruby 1.9.

En la 1.8, si especifica libs a través de -r, ruby intentará cargar cada biblioteca sin prestar atención a los cambios en la $LOAD_PATH.Pero rubygems hace el cambio $LOAD_PATH así que las gemas se pueden encontrar.

La razón por la que funciona con irb es que irb ¿ preste atención a $LOAD_PATH cambios.

Por desgracia, la mejor solución que he encontrado es utilizar la más detallado de la forma:

ruby -rubygems -e 'require "foobar"; p FooBar.question'

El dolor no aumenta linealmente con el número de librerías, sin embargo, si usted usa un iterador:

ruby -rubygems -e '%w(rake rspec).each{|r| require r }'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top