2009-04-06 20 views

Odpowiedz

11

To co kiedyś:

stąd: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master

Instalacja

Po pierwsze, trzeba będzie Ruby i Ruby DBI ODBC. Według mojej wiedzy ADO DBD dla DBI nie jest już obsługiwany. Poniższa instalacja nie stanowi wyczerpującej informacji na temat sposobu instalowania i/lub konfigurowania wszystkich wymaganych ruchomych części, takich jak FreeTDS. Zakłada również instalacje gem zarówno bibliotek zależnych, jak i samego adaptera.

Należy zauważyć, że ta wersja adaptera została opracowana przy użyciu starszej wersji DBI 0.0.23 do aktualnej stabilnej wersji 0.4.0. Ponieważ późniejsze wersje DBI będą zmieniać wiele rzeczy, JEST WYSOCE ZALECANE, abyś maksymalnie zainstalował do wersji 0.4.0, co pokazują poniższe przykłady. Na razie nie obsługujemy wersji DBI wyższych niż 0.4.0. Dobrą wiadomością jest to, że jeśli korzystasz z bardzo starego DBI z ADO, technicznie ten adapter będzie nadal działał dla ciebie, ale pamiętaj, że twoja ścieżka się starzeje i może nie być obsługiwana przez długi czas.

$ 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 

stąd: http://lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/

Po pierwsze, należy zaktualizować ~/.profile do zawierać następujące elementy:

export ODBCINI=/etc/odbc.ini 
export ODBCSYSINI=/etc 
export FREETDSCONF=/etc/freetds/freetds.conf 

Następnie przeładować .profile, logując się i ponownie.

Po drugie, na systemie Ubuntu 7.10 musiałem zainstalować kilka pakietów.

[email protected]:~$ sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc 

Z FreeTDS zainstalowanych mogę skonfigurować go tak:

[email protected]:/etc/freetds$ cat freetds.conf 
[ACUMENSERVER] 
    host = 192.168.0.10 
    port = 1433 
    tds version = 7.0 

Ważną rzeczą jest ACUMENSERVER, który jest DSN że użyję podczas łączenia się z bazą danych. Host i port są niezrozumiałe i warto zauważyć, że musiałem używać 7.0 jako wersję tds.

Testowanie FreeTDS nie jest zbyt trudne:

[email protected]:~$ 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 

Następna w kolejce jest to konieczne, aby skonfigurować ODBC:

[email protected]:/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 

[email protected]:/etc$ cat odbc.ini 
[ACUMENSERVER] 
Driver   = FreeTDS 
Description  = ODBC connection via FreeTDS 
Trace   = No 
Servername  = ACUMENSERVER 
Database  = ACUMEN 

I następnie testowane połączenie z isql:

[email protected]:~$ 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 

OK, więc mamy ODBC używający FreeTDS do połączenia ze zdalnym serwerem MSSQL. Pozostało tylko dodać Ruby do miksu.

[email protected]:~$ sudo aptitude install libdbd-odbc-ruby 

Ostatnią rzeczą do sprawdzenia jest to, że Ruby można użyć DBI i ODBC uderzy rzeczywistej bazy danych, a to jest łatwe do testu:

[email protected]:~$ 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 

i bardziej kompletny test (tylko z SQL SELECT, przeszkadza ci):

#!/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> 

Stąd (naprawić lib odbc będąc w niewłaściwym miejscu): http://ubuntuforums.org/showthread.php?t=433435&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. 

albo sposób działa przy dostępie MSSQL z wiersza

isql -v $dsn $user $passwd 

Znalazłem to być użyteczne

http://www.unixodbc.org/doc/FreeTDS.html#Configuration

A następnie w pliku database.yml:

development: 
    adapter: sqlserver 
    mode: odbc 
    dsn: dsn_name 
    username: my_username 
    password: my_password 
2

To są ste ps skompilowałem dla Centos 5.3. Zajęło mi wiele prób i błędów, aby to zadziałało. To z całkowicie czystej instalacji Centos.

Install EPEL:

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm 

zainstalować Ruby RubyGems, FreeTDS, unixodbc, narzędzi programistycznych:

yum install gcc 
yum install freetds 
yum install ruby-devel 
yum install unixODBC-devel 
yum install ruby rubygems 

zainstalować poręcze:

gem install rails 

Install DB związane perełki:

gem install dbd-odbc 
gem install rails-sqlserver-2000-2005-adapter -s http://gems.github.com 

Pobierz zbudować i zainstalować 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 

Ostateczna lista 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) 

Można użyć różnych narzędzi, takich jak isql aby przetestować połączenie ODBC. Brian's post opisuje to szczegółowo, więc nie powtórzę. W szynach trzeba database.yml, który wygląda mniej więcej tak:

development: 
    adapter: sqlserver 
    mode: odbc 
    dsn: dsnName 
    username: username 
    password: password 
1

na Ubuntu używam FreeTDS i gem activerecord-sqlserver-adaptera.

Można zainstalować FreeTDS przez apt:

sudo apt-get install freetds 

i dodać do swojej Gemfile:

gem 'activerecord-sqlserver-adapter' 

musiałem zmienić skonfigurowaną FreeTDS numer wersji w /etc/freetds/freetds.conf do 8.0 w celu uzyskania rzeczy działa poprawnie.

[global] 
    tds version = 8.0 

activerecord-sqlserver-adapter on GitHub

FreeTDS project

Powiązane problemy