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 目录下,但它看不到它。
还有什么我可以做的吗?