ruby 与 sybase 连接
企业应用中部署了众多的sybase,现将ruby连接sybase总结出来五步:
1、Sybase PC Client 12.52
a、安装;
b、配置环境变量:
SYBASE=c:\sybase
SYBASE_JRE=C:\sybase\shared-1_0\JRE-1_3
SYBASE_OCS=OCS-12_5
c、运行工具中的dsedit,设定一个名称,如test,配置地址和端口号,135.1.1.1,4100。这时候,会在sybase安装目录的ini目录中出现一个sql.ini文件,内容如下:
[test]
master=TCP,1.1.1.1,4100
query=TCP,1.1.1.1,4100
注意:这个文件非常重要,用在连接字符串中,其中test就是“host”对应着主机名。
2、ruby-sybase动态库;
下载ruby-sybase-winxp.zip(这是sybase-ctlib的windows版本,下载网址http://flesaker.no/software/sybase-ctlib/? ,如果在unix下使用,需要下载源代码进行编译),有三个文件:sybct.o/sybct.rb/sybsql.rb
复制到ruby运行目录的lib\ruby\site_ruby\1.8\i386-msvcrt下
3、下载activerecord-sybase-adapter,可以到github去;
下载后,进入目录,将sybase-adapter.rb拷贝到ruby\lib\ruby\gems\1.8\gems\activerecord-2.3.8\lib\active_record\connection_adapters目录下即可。
或者采用 gem install activerecord-sybase-adapter -s http://gems.rubyonrails.org 不过好像提示必须安装3.0.3的activerecord。
4、测试:
进入irb
require 'rubygems'
require 'active_record'
ActiveRecord::Base.establish_connection(
? :adapter => "sybase",
? :host => "test",
? :username => "sa",
? :password => '####',
? :database => "####",
? :numconvert => true
)
class M < ActiveRecord::Base
set_table_name 'tbl_Result_100665842_4'
end
注意:这里配置的host参数就是sybase客户端下ini目录下的sql.ini定义的“test”。
这时候敲入M,显示出来
=> M(StartTime: datetime, StartTimeDstOffset: integer, SvrStartTime: datetime, S
TSvrDstOffset: integer, EndTime: datetime, EndTimeDstOffset: integer, SvrEndTime
: datetime, ETSvrDstOffset: integer, InsertTime: datetime, TimezoneOffset: integ
er, ObjectNo: integer, GranulityPeriod: integer, ResultReliablityFlag: integer,
Counter_100991422: decimal, Counter_100991423: decimal, Counter_100991424: decim
al, Counter_100991425: decimal, Counter_100991426: decimal)
这样的库结构,说明正常。
常出现的问题:
a、sybase客户端安装之后的环境设置不准确,检查方式:打开cmd窗口,set,看看三个环境变量设置是否准确;
b、ruby-sybase动态库,需要区分windows还是unix的,复制到准确的位置。这一步如果做得有问题,会产生如下错误:
ActiveRecord::AdapterNotFound: database configuration specifies nonexistent syba
se adapter
??????? from D:/ir3/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_re
cord/connection_adapters/abstract/connection_specification.rb:82:in `establish_c
onnection'
5、编写database.yml。写法参照ActiveRecord::Base.establish_connection中的连接字符串。
?