3

Rails n00b 这里 - 需要一些帮助。我正在尝试将 Rails3 应用程序从 Linux 移植到 Windows。我的 Gemfile 如下所示:

source 'http://rubygems.org'
gem 'rails', '3.0.0'
gem 'sqlite3-ruby', '1.2.5', :require => 'sqlite3'
gem 'ruby-oci8', '1.0.6'

我在这台 Windows 机器上没有 Oracle 客户端,所以我无法本地编译 ruby​​-oci8 gem。

我已经在我的 Gemfile 中注释掉了“ruby-oci8”行,并从这里手动安装了 gem:http ://rubygems.org/downloads/ruby-oci8-1.0.6-x86-mswin32-60.gem 。我还将必要的 DLL 复制到ruby\bin.

我已经验证它有效:

ruby -rubygems -e "require 'oci8'; OCI8.new('user','password','pasdev:2700/gen11dvu').exec('select * from ARCS_USER_LO
GON') do |r| puts r.join(','); end"

这会从我的数据库返回大量数据,所以我知道它有效。

但是,如果我尝试require 'oci8'从 rails 控制台(或正在运行的应用程序),我会得到以下信息:

LoadError: no such file to load -- oci8

我认为这发生在 b/c Rails 只加载 Gemfile 中指定的 gem,但我不知道如何指定它!我已经安装了我需要的 gem:

C:\javadev\ashbtw3>gem list

*** LOCAL GEMS ***

activerecord (3.0.0)
bundler (1.0.21, 1.0.0)
rails (3.0.0)
rake (0.8.7)
ruby-oci8 (1.0.6 x86-mswin32-60)
...etc...

然而,如果我在 Gemfile 中取消注释这一行:

gem 'ruby-oci8', '1.0.6'

bundler 尝试下载并编译另一个 1.0.6,这当然会失败。我也尝试了所有这些变体,但均未成功:

gem 'ruby-oci8', '1.0.6', :platforms => :mingw
gem 'ruby-oci8', '1.0.6-x86-mswin32-60', :platforms => :mingw32
gem 'ruby-oci8-1.0.6-x86-mswin32-60'
gem 'ruby-oci8', '1.0.6-x86-mswin32-60'

为什么 bundler 试图安装我已经拥有的 gem?如何正确指定版本和平台以使 Bundler 看到该 gem 已安装,并将其包含在 Gemfile.lock 中?这里有没有其他解决方案可以在不安装 Oracle 客户端的情况下使用?

编辑 1

根据凯尔的建议,我尝试了以下方法:

gem 'ruby-oci8', :path => 'C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60

这使得 Bundler 运行成功!

Using ruby-oci8 (1.0.6) from source at C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60

但是,现在尝试从 Rails 控制台要求“oci8”给了我这个:

C:\javadev\ashbtw3>ruby script\rails console
Loading development environment (Rails 3.0.0)
irb(main):001:0> require 'oci8'
LoadError: no such file to load -- oci8lib
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/ruby-oci8-1.0.6-x86-mswin32-60/lib/oci8.rb:20
        from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'

它缺少的文件ext/oci8位于已安装的 gem 目录下,但它看不到它。

还有什么我可以做的吗?

4

1 回答 1

2

您是否尝试过指定:path?

gem 'ruby-oci8', :path => '/path/to/ruby-oci8-1.0.6-x86-mswin32-60'
于 2013-01-10T01:40:46.393 回答