2010-04-22 10 views
40

W szczególności klejnot ruby-oci8. Mam zainstalowane zarówno wersje 1.0.7, jak i 2.0.4. Chcę 1.0.7.Jak mogę wymagać określonej wersji rubinowego klejnotu?

Mogę po prostu wymagać oci8, ale nie dostaję wersji, której chcę.

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

mogę wymagać korzystania z pełną ścieżkę do pliku, który działa, ale nie ma być przenośny:

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" 

mogę użyć polecenia gem prosić o wersji chcę, ale nie wydaje się, aby faktycznie załadować biblioteki:

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 

pewno sprzyjać to ostatnie podejście, gdyby załadować biblioteki, a nie tylko potwierdza, że ​​jest obecny w moim systemie. czego mi brakuje?

Odpowiedz

64

Mój problem był dwojaki:

1) mylące składnię polecenia gem z tej stosowanej w liniach config.gem w ciągu szyn environment.rb plik konfiguracyjny.

2) nie wydawanie polecenia require po poleceniu gem.

Prawidłowe użycie w skrypcie jest:

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 

Prawidłowe wykorzystanie w szynach 2.3.x pliku environment.rb jest:

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

Dzięki ludzie na wydaje require_gem http://www.ruby-forum.com/topic/109100

1

Spróbuj następującą składnię (zamiast wymagać):

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

być przestarzałą składnią, zastąpioną poleceniem gem, o którym wspomniałem w trzecim przykładzie w moim pytaniu (używam rubygemów 1.3.5). Ale Twoja sugestia doprowadziła mnie do wątku pod adresem http://www.ruby-forum.com/topic/109100, co oznacza, że ​​najpierw powinienem wydać polecenie gem, a następnie zażądać tego klejnotu, na przykład: gem 'ruby -oci8 ',: lib =>' oci8 ',: version =>' = 1.0.7 '; wymaga 'oci8' Ale to też nie działa dla mnie - nadal kończę z załadowanym 2.0.4. Podejrzewam, że jestem hamowany przez różnicę między nazwą klejnotu (ruby-oci8) a nazwą pliku do załadowania (oci8). – KenB

Powiązane problemy