【发布时间】:2014-03-11 15:13:21
【问题描述】:
我正在尝试使用“activerecord”和 Ruby 1.8.7 连接到 Oracle 数据库,但在我的 Windows 7 机器上出现以下错误。我搜索了这个问题,发现 1.8 和 1.9 ruby 声明 'Hash' 但是我使用的是 Ruby 1.8.7,我觉得我使用了正确的哈希声明,如果我错了,请纠正我。
C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `gem_original_require': C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhancedadapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:917: odd number list for Hash (SyntaxError)
read_committed: "READ COMMITTED",
^
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:917: syntax error, unexpected ':', expecting '}'
read_committed: "READ COMMITTED",
^
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:917: syntax error, unexpected ',', expecting kEND
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:919: syntax error, unexpected '}', expecting kEND
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:1471: dynamic constant assignment
DBMS_OUTPUT_BUFFER_SIZE = 10000 # can be 1-1000000
^
C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-oracle_enhanced-adapter-1.5.3/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb:1555: syntax error, unexpected $end, expecting kEND
from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:29:in `require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:521:in `new_constants_in'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:156:in `require'
from C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:71:in `establish_connection'
from oracle_conn_testing.rb:5
这就是我的代码的样子
require 'rubygems'
gem "activerecord-oracle_enhanced-adapter"
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "oracle_enhanced",
:database => "someurl.net:1523/ABCAD",
:username => "testing1",
:password => "testing1")
class TestTable < ActiveRecord::Base
set_table_name "TABLE_NAME"
set_primary_key "ID"
end
TestTable.find(:all).each do |tt|
p tt
end
nac = TestTable.new()
其他信息: 我的机器上有以下宝石: * 本地宝石 *
- actionmailer (2.3.4)
- 动作包 (2.3.4)
- 活动记录 (2.3.4)
- activerecord-oracle_enhanced-adapter (1.5.3)
- 活动资源 (2.3.4)
- 主动支持 (2.3.4)
- json (1.8.1)
- mysql (2.9.1 x86-mingw32)
- 机架 (1.0.1)
- 导轨 (2.3.4)
- 耙子 (10.1.1)
- ruby-oci8 (2.1.7 x86-mingw32)
- rubygems 更新 (1.4.2)
我使用以下 Rubygems 版本:
C:\Users\tester1>gem -v
1.4.2
我尝试使用 OCI8 进行连接,并且能够从 Oracle 数据库中获得响应,因此我的计算机没有连接问题。
irb(main):006:0> OCI8.new('testing1', 'testing1', 'someurl.net:1523/ABCAD').exec('select sysdate from dual') do |r| puts r.join(', ') end
Mon Mar 10 15:09:23 -0400 2014
=> 1
我使用以下链接作为参考: http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/oow10/rubyhol/instructions/rubyrails.htm
【问题讨论】:
-
看起来
activerecord-oracle_enhanced-adapter最新版本与 Ruby 1.8.7 不兼容,因为其源代码中使用了哈希语法。你可以试试旧版本。您也可以提交修复它的请求。如果你有时间,你可以尝试自己修复它并提交一个拉取请求,但值得检查的是,这个想法没有任何阻力。 Ruby 1.8.7 官方在不同程度上“不受支持”,具体取决于项目。 -
感谢 Neil,我使用了 1.4.1 版本的 activerecord-oracle_enhancedadapter gem,现在可以正常工作了,非常感谢!
标签: ruby activerecord