[英]Connecting SQL-Server directly to online Database rails activerecord-sqlserver-adapter
[英]Connecting to SQL Server with ActiveRecord
您是否曾經使用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服務器上我需要安裝一些軟件包。
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')
=> #<DBI::DatabaseHandle:0xb7ac57f8 @handle=#<DBI::DBD::ODBC::Database:0xb7ac5744
@handle=#<odbc::database:0xb7ac576c>, @attr={}>, @trace_output=#</odbc::database:0xb7ac576c><io:0xb7cbff54>,
@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
</io:0xb7cbff54>
從這里(修復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 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 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的帖子詳細介紹了這一點,所以我不再重復了。 在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.