2010-04-22 53 views
40

具體來說,ruby-oci8寶石。我安裝了1.0.7和2.0.4。我想要1.0.7。如何獲得特定版本的紅寶石?

我可以只需要oci8,但我沒有得到我想要的版本。

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

我可能需要使用該文件,其作品的完整路徑,但不會是便攜:

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" 

我可以使用寶石命令,要求我想要的版本,但它似乎並不實際加載庫:

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 

我肯定會贊成這最後一種方法,如果將加載庫,而不是僅僅確認這是目前我的系統上。我錯過了什麼?

回答

64

我的問題是雙重的:

1)與在一個軌道中config.gem線上使用混亂寶石命令語法的environment.rb配置文件。

2)未能在gem命令後發出require命令。

在腳本中正確的用法是:

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 
在Rails 2.3.x版本的environment.rb文件

正確的用法是:

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

多虧了鄉親http://www.ruby-forum.com/topic/109100

1

嘗試以下語法(而不是需要):

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

出現require_gem是過時的語法,取而代之的是我在第三個例子中引用的gem命令(我使用的是rubygems 1.3.5)。但是你的建議讓我看到http://www.ruby-forum.com/topic/109100上的帖子,它表明我應該首先發布gem命令,然後需要gem,例如: gem'ruby -oci8',:lib =>'oci8',:version =>'= 1.0.7'; 要求'oci8' 但是,這不工作對我來說,無論 - 我仍然最終與2.0.4加載。我懷疑由於gem(ruby-oci8)的名稱和要加載的文件的名稱(oci8)之間的區別,我感到困惑。 – KenB 2010-04-22 20:09:05