TinyTDS未定义符号dbsetluser

时间:2014-04-13 05:55:10

标签: ruby ubuntu freetds tiny-tds ruby-enterprise-edition

在过去的几天里,我一直在努力解决这个问题,而且我没有想法。我正在开发一个有点过时的应用程序,我现在需要添加对SQL Server的支持。我已经设法让它在本地工作(Ubuntu 12.04),但是当我尝试在Ubuntu 8.04实例上的Rackspace上重现它时遇到以下错误:

irb > require 'rubygems'
irb > require 'tiny_tds'
irb > TinyTds::Client.new(:host => 'X.X.X.X', :user name => 'xxx', :password => 'xxx')
irb: symbol lookup error: /opt/ruby-enterprise-1.8.7-2012.02/lib/ruby/gems/1.8/gems/tiny_tds-0.6.0.rc1/lib/tiny_tds/tiny_tds.so: undefined symbol: dbsetluser

我正在运行的堆栈是:

  • Ubuntu 8.04
  • REE 1.8.7-2012.02
  • FreeTDS 0.92.377(源自编译)
  • TinyTDS 0.6.0.rc1(也尝试过0.5.1)

我可以使用isql成功连接到SQL Server,这让我认为FreeTDS和ODBC设置正确。但每当我尝试使用Ruby与TinyTds连接时,我都会收到上述错误。

我已经尝试在Google群组中发布rails-sqlserver-adapter,但论坛似乎已经过审核,我的问题还没有显示出来。

我很确定它与TinyTds没有找到库(我认为应该可以在某处使用),但我不知道如何实现这一点。

作为最后的手段,我将从头开始使用12.04开始构建服务器,但我更希望让现有系统正常工作。

更新

根据@ Casper的建议,我尝试与odbc联系,现在我收到了不同的错误

irb > require ‘odbc’
irb > ODBC.connect('dsn', 'username', 'password')
[unixODBC][FreeTDS][SQL Server]Unable to connect to data source`

即使我可以成功连接isql和sqsh。

由于

1 个答案:

答案 0 :(得分:0)

这一切都与环境变量有关。似乎在安装freetds和odbc之后,FREETDSCONFODBCINIODBCSYSINI的环境变量不可用于Ruby。我必须将它们添加到我的用户的.bashrc/etc/profile以及我的Apache配置中,以便让Passenger看到它们(使用SetEnv)。

希望这有助于将来。