web-dev-qa-db-fra.com

Comment demander une version spécifique d'une gemme Ruby?

Plus précisément, la gemme Ruby-oci8. J'ai installé à la fois 1.0.7 et 2.0.4. Je veux 1.0.7.

Je peux juste avoir besoin d'oci8, mais je n'ai pas la version que je veux.

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

Je peux exiger d'utiliser le chemin complet du fichier, qui fonctionne, mais ne sera pas portable:

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"

Je peux utiliser la commande gem pour demander la version que je veux, mais elle ne semble pas charger la bibliothèque:

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

Je préférerais certainement cette dernière approche si je chargeais la bibliothèque, plutôt que de simplement confirmer qu'elle est présente sur mon système. Qu'est-ce que je rate?

43
KenB

Mon problème était double:

1) confondre la syntaxe de la commande gem avec celle utilisée dans les lignes config.gem d'un fichier de configuration Rails environment.rb).

2) ne pas émettre une commande require après la commande gem.

Une bonne utilisation dans un script est:

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

L'utilisation appropriée dans un fichier Rails 2.3.x environment.rb est:

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

Merci aux gens de http://www.Ruby-forum.com/topic/1091

73
KenB

Essayez la syntaxe suivante (au lieu d'exiger):

require_gem 'RMagick' , '=1.10'
require_gem 'RMagick' , '>=1.10'
require_gem 'rake', '>=0.7.0', '<0.9.0'
1
Jonathan