简体   繁体   English

如何从ruby连接到MS Sql Server

[英]How to connect from ruby to MS Sql Server

I'm trying to connect to the sql server 2005 database from *NIX machine: 我正在尝试从* NIX机器连接到sql server 2005数据库:

I have the following configuration: Linux 64bit 我有以下配置:Linux 64bit

ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux] important gems: dbd-odbc (0.2.4) dbi (0.4.1) active record sql server adapter - as plugin ruby -v ruby​​ 1.8.6(2007-09-24 patchlevel 111)[x86_64-linux]重要的宝石:dbd-odbc(0.2.4)dbi(0.4.1)活动记录sql server adapter - as plugin

ruby-odbc 0.9996 (installed without any options.) unixODBC is installed freeTDS is installed ruby-odbc 0.9996(没有任何选项安装。)安装了unixODBC freeTDS

cat /etc/odbcinst.ini cat /etc/odbcinst.ini

  [FreeTDS]
     Description     = TDS driver (Sybase/MS SQL)
     Driver          = /usr/lib/libtdsodbc.so
     Setup           = /usr/lib/odbc/libtdsS.so
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1

DSN: DSN:

DRIVER=FreeTDS;TDS_Version=8.0;SERVER=XXXX;DATABASE=XXX;Port=1433;uid=XXX;pwd=XXXX;"

or 要么

DRIVER=/usr/lib/libtdsodbc.so;TDS_Version=8.0;SERVER=XXXX;DATABASE=XXX;Port=1433;uid=XXX;pwd=XXXX;"

I receive the following error: 我收到以下错误:

>>ActiveRecord::Base.sqlserver_connection({"mode"=>"ODBC", "adapter"=>"sqlserver", "dsn"=>my_dns)
DBI::DatabaseError: IM002 (0) [unixODBC][Driver Manager]Data source name not found, and no default driver specified
    from /usr/lib/ruby/1.8/DBD/ODBC/ODBC.rb:95:in `connect'
    from /usr/lib/ruby/1.8/dbi.rb:424:in `connect'
    from /usr/lib/ruby/1.8/dbi.rb:215:in `connect'
    from /opt/ublip/rails/current/vendor/plugins/activerecord-sqlserver-adapter/lib/active_record/connection_adapters/sqlserver_adapter.rb:47:in `sqlserver_connection'

It looks like ODBC unable to find appropriate ODBC driver, but I have no ideas why. 看起来ODBC无法找到合适的ODBC驱动程序,但我不知道为什么。

I had a problem with /usr/lib/libtdsodbc.so which is empty in default debian package free-tds dev, but i solved it with remove broken package and installation from sources. 我遇到了/usr/lib/libtdsodbc.so的问题,它在默认的debian软件包free-tds dev中是空的,但我解决了它,删除了破坏的软件包并从源代码安装。

Will appreciate any thought! 会不会有任何想法!

Note: I'm albe to connect using the same steps on mac 10.5 注意:我总是在mac 10.5上使用相同的步骤进行连接

This looks close, and I've gotten the same type of setup to work on Ubuntu 8.04 (with Ruby 1.8.6.) Since this is on Debian, it should be the similar. 这看起来很接近,我已经得到了相同类型的设置来使用Ubuntu 8.04(使用Ruby 1.8.6。)因为这是在Debian上,它应该是类似的。

These packages should be installed: unixodbc unixodbc-dev freetds-dev libdbd-odbc-ruby tdsodbc 应安装这些软件包:unixodbc unixodbc-dev freetds-dev libdbd-odbc-ruby tdsodbc

/etc/odbcinst.ini should have something like this: /etc/odbcinst.ini应该有这样的东西:

[FreeTDS]
Description = FreeTDS unixODBC Driver
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsodbc.so
UsageCount = 1

And /etc/freetds/freetds.conf: (where XXX is the database name and NNN... is the IP of the server): 和/etc/freetds/freetds.conf :(其中XXX是数据库名称,NNN ...是服务器的IP):

[XXX]
  host = NNN.NNN.NNN.NNN
  tds version = 8.0
  client charset = UTF-8
  text size = 262144
  port = 1433

Then to connect: 然后连接:

ActiveRecord::Base.sqlserver_connection({"mode"=>"ODBC", 
  "adapter"=>"sqlserver", 
  "dsn"=>"DRIVER=FreeTDS;SERVERNAME=XXX;DATABASE=XXX;uid=XXX;pwd=XXX"
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM