使用ActiveRecord连接到SQL Server
您是否曾经使用ActiveRecord连接到SQL Server? 这可能吗? 任何人都可以提供一些起点吗?
这是我用过的:
从这里: http : //github.com/rails-sqlserver/2000-2005-adapter/tree/master
安装
首先,您需要Ruby DBI和Ruby ODBC。 据我所知,不再支持ADO DBD for DBI。 下面的安装不是一个全面的步骤,了解如何安装和/或配置FreeTDS等所有必需的移动部件。 它还将假定依赖库和适配器本身的gem安装。
应该注意的是,这个版本的适配器是使用古老的0.0.23版本的DBI开发的,直到0.4.0的当前稳定版本。 因为更高版本的DBI将会改变很多东西,所以我们强烈建议您将安装最大化到版本0.4.0,以下示例显示。 目前我们不支持高于0.4.0的DBI版本。 好消息是,如果你使用一个非常旧的DBI与ADO,从技术上讲,这个适配器仍然适合你,但要警告你的路径变老,可能不会长期支持。
$ gem install dbi --version 0.4.0 $ gem install dbd-odbc --version 0.2.4 $ gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com
从这里: http : //lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/
首先,更新〜/ .profile以包含以下内容:
export ODBCINI=/etc/odbc.ini export ODBCSYSINI=/etc export FREETDSCONF=/etc/freetds/freetds.conf
然后通过注销再次加载.profile。
其次,在Ubuntu 7.10 Server上我需要安装一些软件包。
mlambie@ubuntu:~$ sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc
安装FreeTDS后,我可以这样配置:
mlambie@ubuntu:/etc/freetds$ cat freetds.conf [ACUMENSERVER] host = 192.168.0.10 port = 1433 tds version = 7.0
这里重要的是ACUMENSERVER,它是我在连接数据库时使用的DSN。 主机和端口是不言自明的,值得注意的是我必须特别使用7.0作为tds版本。
测试FreeTDS并不太难:
mlambie@ubuntu:~$ sqsh -S ACUMENSERVER -U username -P password sqsh: Symbol `_XmStrings' has different size in shared object, consider re-linking sqsh-2.1 Copyright (C) 1995-2001 Scott C. Gray This is free software with ABSOLUTELY NO WARRANTY For more information type '\warranty' 1> use acumen 2> go 1> select top 1 firstname, lastname from tblClients 2> go [record returned] (1 row affected) 1> quit
接下来需要配置ODBC:
mlambie@ubuntu:/etc$ cat odbcinst.ini [FreeTDS] Description = TDS driver (Sybase/MS SQL) Driver = /usr/lib/odbc/libtdsodbc.so Setup = /usr/lib/odbc/libtdsS.so CPTimeout = CPReuse = FileUsage = 1 mlambie@ubuntu:/etc$ cat odbc.ini [ACUMENSERVER] Driver = FreeTDS Description = ODBC connection via FreeTDS Trace = No Servername = ACUMENSERVER Database = ACUMEN
然后我测试了与isql的连接:
mlambie@ubuntu:~$ isql -v ACUMENSERVER username password +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> use ACUMEN [][unixODBC][FreeTDS][SQL Server]Changed database context to 'Acumen'. [ISQL]INFO: SQLExecute returned SQL_SUCCESS_WITH_INFO SQLRowCount returns -1 SQL> select top 1 firstname from tblClients; [record returned] SQLRowCount returns 1 1 rows fetched SQL> quit
好的,所以我们使用FreeTDS连接到远程MSSQL服务器的ODBC。 剩下的就是将Ruby添加到组合中。
mlambie@ubuntu:~$ sudo aptitude install libdbd-odbc-ruby
最后要测试的是Ruby可以使用DBI和ODBC来访问实际的数据库,这很容易测试:
mlambie@ubuntu:~$ irb irb(main):001:0> require "dbi" => true irb(main):002:0> dbh = DBI.connect('dbi:ODBC:ACUMENSERVER', 'username', 'password') => #, @attr={}>, @trace_output=#, @trace_mode=2> irb(main):003:0> quit
还有一个更完整的测试(只有SQL SELECT,请注意):
#!/usr/bin/env ruby require 'dbi' db = DBI.connect('dbi:ODBC:ACUMENSERVER', 'username', 'password') select = db.prepare('SELECT TOP 10 firstname FROM tblClients') select.execute while rec = select.fetch do puts rec.to_s end db.disconnect
从这里(为了修复odbc lib在错误的地方): http : //ubuntuforums.org/showthread.php?t = 43345&page = 2
libtdsodbc.so with freeTDS (freetds-dev, tdsodbc), you can either edit the path in the odbcinst.ini file for the [FreeTDS] driver section OR cp the /usr/lib/odbc/libtdsodbc.so into /usr/lib/libtdsodbc.so.
从提示中访问mssql时,两种方式都有效
isql -v $dsn $user $passwd
我发现这很有用
http://www.unixodbc.org/doc/FreeTDS.html#Configuration
然后在database.yml文件中:
development: adapter: sqlserver mode: odbc dsn: dsn_name username: my_username password: my_password
这些是我为Centos 5.3编译的步骤。 为了让这个工作起来,我花了很多的试验和错误。 它来自一个完全干净的Centos安装。
安装EPEL:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
安装ruby,rubygems,freetds,unixODBC,开发工具:
yum install gcc yum install freetds yum install ruby-devel yum install unixODBC-devel yum install ruby rubygems
安装导轨:
gem install rails
安装与DB相关的gem:
gem install dbd-odbc gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com
下载,构建和安装ruby-odbc:
wget http://www.ch-werner.de/rubyodbc/ruby-odbc-0.9997.tar.gz tar zxvf ruby-odbc-0.9997.tar.gz cd ruby-odbc-0.9997 ruby extconf.rb make make install
最终gem清单:
# gem list *** LOCAL GEMS *** actionmailer (2.3.2) actionpack (2.3.2) activerecord (2.3.2) activeresource (2.3.2) activesupport (2.3.2) dbd-odbc (0.2.4) dbi (0.4.1) deprecated (2.0.1) rails (2.3.2) rails-sqlserver-2000-2005-adapter (2.2.17) rake (0.8.7)
您可以使用各种工具(如isql)来测试ODBC连接。 Brian的post详细介绍了这一点,所以我不再重复了。 在rails中你需要一个看起来像这样的database.yml:
development: adapter: sqlserver mode: odbc dsn: dsnName username: username password: password
在Ubuntu上,我使用FreeTDS和activerecord-sqlserver-adapter gem。
您可以通过apt安装FreeTDS:
sudo apt-get install freetds
并将其添加到您的Gemfile:
gem 'activerecord-sqlserver-adapter'
我必须将/etc/freetds/freetds.conf
配置的FreeTDS版本号更改为8.0
才能使事情正常运行。
[global] tds version = 8.0
GitHub上的activerecord-sqlserver-adapter
FreeTDS项目