在过去的几天里,我一直在努力解决这个问题,而且我没有想法。我正在开发一个有点过时的应用程序,我现在需要添加对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
我正在运行的堆栈是:
我可以使用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。
由于
答案 0 :(得分:0)
这一切都与环境变量有关。似乎在安装freetds和odbc之后,FREETDSCONF
,ODBCINI
和ODBCSYSINI
的环境变量不可用于Ruby。我必须将它们添加到我的用户的.bashrc
和/etc/profile
以及我的Apache配置中,以便让Passenger看到它们(使用SetEnv
)。
希望这有助于将来。