Ruby on rails 3 将Redhat连接到SQL Server 2008 for Ruby on Rails

Ruby on rails 3 将Redhat连接到SQL Server 2008 for Ruby on Rails,ruby-on-rails-3,sql-server-2008,redhat,freetds,unixodbc,Ruby On Rails 3,Sql Server 2008,Redhat,Freetds,Unixodbc,我正在尝试将Redhat Linux连接到Microsoft SQL Server 2008。我在windows(我的测试机器)上设置它时遇到了麻烦,但现在我需要将它部署到Linux机器上,在那里它将投入生产 因此,我安装了unixODBC和FreeTDS(花了很大的努力,甚至不确定是否正确安装了:S),结果是我在/usr/local/etc中有3个文件: odbc.ini odbcinst.ini freetds.conf 然后我编辑了freetds.conf文件,我添加了以下内容: [sq

我正在尝试将Redhat Linux连接到Microsoft SQL Server 2008。我在windows(我的测试机器)上设置它时遇到了麻烦,但现在我需要将它部署到Linux机器上,在那里它将投入生产

因此,我安装了unixODBC和FreeTDS(花了很大的努力,甚至不确定是否正确安装了:S),结果是我在
/usr/local/etc
中有3个文件:

odbc.ini
odbcinst.ini
freetds.conf
然后我编辑了
freetds.conf
文件,我添加了以下内容:

[sqlServer]
host = servername
port = 4113
instance = sqlServer
tds version = 8.0
client charset = UTF-8
我必须从我的DBA中找到端口号,因为在SQLServer2008中它被设置为动态

我的
odbcinst.ini
文件如下所示:

[FreeTDS]
Description     = TDS driver (Sybase/MS SQL)
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtdsS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1
[sqlServer]
Driver = FreeTDS
Description     = ODBC connection via FreeTDS
Trace           = 1
Servername      = sqlServer
Database        = RubyApp
我的
odbc.ini
文件如下所示:

[FreeTDS]
Description     = TDS driver (Sybase/MS SQL)
Driver          = /usr/local/lib/libtdsodbc.so
Setup           = /usr/local/lib/libtdsS.so
CPTimeout       =
CPReuse         =
FileUsage       = 1
[sqlServer]
Driver = FreeTDS
Description     = ODBC connection via FreeTDS
Trace           = 1
Servername      = sqlServer
Database        = RubyApp
所以现在我尝试通过使用连接来查看是否存在任何连接

tsql-S sqlServer-U test-p test
, 但是,这只会给我以下错误:

locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20013 (severity 2):
        Unknown host machine name.
There was a problem connecting to the server
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Unknown host machine name.
[ISQL]ERROR: Could not SQLConnect
当我尝试使用isql时,在执行
isql-vsqlserver测试时,出现了以下错误:

locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20013 (severity 2):
        Unknown host machine name.
There was a problem connecting to the server
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Unknown host machine name.
[ISQL]ERROR: Could not SQLConnect

知道我做错了什么吗?

您不需要freetds.conf文件中的SQL Server主机名或IP地址吗--


如果无法与tsql连接,则SQL server或
freetds.conf
中存在连接问题

[TDS]
host = 127.0.0.1
port = 1434
tds version = 7.0
首先使用
tsql-LH[SQL server IP]

# tsql -LH 127.0.0.1
  ServerName HOME
InstanceName INSTANCE1
 IsClustered No
     Version 10.50.2500.0
         tcp 1434
如果这不起作用,则表明服务器与SQL server之间存在连接问题

如果确实有效,则在
freetds.conf
中将端口设置为与上面的tcp匹配

[TDS]
host = 127.0.0.1
port = 1434
tds version = 7.0
实例在您的
odbc.ini中设置

[MSSQLExample]
Description = Example server
Driver = FreeTDS
Trace = No
Server = 127.0.0.1\INSTANCE1
Database = MyDatabase
port = 1434
如果所有其他方法都失败了,请尝试使用
osql
获取关于哪个部分不起作用的反馈

# osql -S MSSQLExample -U USERNAME -P PASSWORD

关于tsql错误消息的一些好信息:

是的,我确实需要它,但为了安全起见,我写了
servername
而不是真正的servername这个:Server=127.0.0.1\INSTANCE1保存了我的bacon!