2010-04-22 17 views
40

Específicamente, la gema ruby-oci8. Tengo 1.0.7 y 2.0.4 instalados. Quiero 1.0.7.¿Cómo necesito una versión específica de una gema de rubí?

Puedo simplemente requerir oci8, pero no obtengo la versión que quiero.

irb(main):001:0> require 'oci8' 
=> true 
irb(main):002:0> OCI8::VERSION 
=> "2.0.4" 

que puede requerir el uso de la ruta completa al archivo, que funciona, pero no va a ser portátil:

irb(main):001:0> require 'C:\Ruby\lib\ruby\gems\1.8\gems\ruby-oci8-1.0.7-x86-mswin32-60\lib\oci8' 
=> true 
irb(main):002:0> OCI8::VERSION 
=> "1.0.7" 

que puede utilizar el comando joya para pedir la versión que yo quiero, pero no parece cargar en realidad la biblioteca:

irb(main):001:0> gem 'ruby-oci8', :lib=>'oci8', :version=>'=1.0.7' 
=> true 
irb(main):002:0> OCI8::VERSION 
NameError: uninitialized constant OCI8 
    from (irb):2 

sin duda, favorecer este último enfoque, si se carga la biblioteca, en lugar de que se confirme que está presente en mi sistema. ¿Qué me estoy perdiendo?

Respuesta

64

Mi problema era doble:

1) confundiendo sintaxis del comando joya con la utilizada en líneas config.gem en unos raíles environment.rb archivo de configuración.

2) falla al emitir un comando require después del comando gem.

El uso apropiado en un script es:

gem 'ruby-oci8', '=1.0.7' 
require 'oci8'   # example is confusing; file required (oci8.rb) is not 
         # same name as gem, as is frequently the case 

El uso apropiado en un archivo environment.rb 2.3.x rieles es:

config.gem "ruby-oci8", :version=>'1.0.7' 

Gracias a la gente de http://www.ruby-forum.com/topic/109100

1

intente lo siguiente sintaxis (en lugar de requerir):

require_gem 'RMagick' , '=1.10' 
require_gem 'RMagick' , '>=1.10' 
require_gem 'rake', '>=0.7.0', '<0.9.0' 
+7

aparece require_gem ser una sintaxis obsoleta, reemplazada por el comando gema al que hice referencia en el tercer ejemplo de mi pregunta (estoy usando rubygems 1.3.5). Pero su sugerencia me puso en el hilo en http://www.ruby-forum.com/topic/109100, lo que indica que primero debo emitir el comando gem, y luego requerir la gema, como: gem 'ruby -oci8 ',: lib =>' oci8 ',: versión =>' = 1.0.7 '; requiere 'oci8' Pero eso tampoco funciona para mí, todavía termino con 2.0.4 cargado. Sospecho que estoy bloqueado por la diferencia entre el nombre de la gema (ruby-oci8) y el nombre del archivo para cargar (oci8). – KenB

Cuestiones relacionadas