2009-04-06 13 views

Respuesta

11

Esto lo he utilizado:

A partir de aquí: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master

instalación

En primer lugar, se necesita de Ruby y Ruby DBI ODBC. Que yo sepa, ADO DBD para DBI ya no es compatible. La siguiente instalación no es un recorrido completo sobre cómo obtener todas las piezas móviles requeridas como FreeTDS instalado y/o configurado. También asumirá las instalaciones de gemas tanto de las bibliotecas dependientes como del adaptador en sí.

Cabe señalar que esta versión del adaptador se desarrolló utilizando tanto la antigua versión 0.0.23 de DBI hasta la versión estable actual de 0.4.0. Debido a que las versiones posteriores de DBI cambiarán muchas cosas, SE RECOMIENDA ALTAMENTE que maximice su instalación a la versión 0.4.0 que muestran los ejemplos a continuación. Por el momento, no estamos soportando versiones de DBI superiores a 0.4.0. La buena noticia es que si usabas un DBI muy antiguo con ADO, técnicamente este adaptador funcionará para ti, pero ten en cuenta que tu camino se está haciendo viejo y es posible que no se admita por mucho tiempo.

$ 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 

A partir de aquí: http://lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/

En primer lugar, actualizar su ~/.profile para incluir lo siguiente:

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

vuelva a cargar el archivo .profile, cerrando la sesión y de nuevo.

En segundo lugar, en Ubuntu 7.10 Server, necesitaba instalar algunos paquetes.

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

Con FreeTDS instalada i podría configurar de esta manera:

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

Lo importante aquí es ACUMENSERVER, que es el DSN que voy a usar cuando se conecta a la base de datos. El host y el puerto se explican por sí solos, y vale la pena señalar que tuve que usar 7.0 específicamente como la versión de tds.

Prueba FreeTDS no es demasiado difícil:

[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 

El siguiente es necesaria para configurar 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 

Entonces probé la conexión con 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, así que tenemos ODBC usando FreeTDS para conectarnos a un servidor MSSQL remoto. Todo lo que queda es agregar Ruby a la mezcla.

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

La última cosa a probar es que Ruby puede utilizar DBI y ODBC para golpear la base de datos real, y eso es fácil de probar:

[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 

Y una prueba más completa (sólo con SQL SELECT, le importaría):

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

Desde aquí (para fijar la lib ODBC estar en el lugar equivocado): 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. 

de cualquier manera funciona cuando se accede a mssql desde el símbolo

isql -v $dsn $user $passwd 

Me pareció que para ser útil

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

Y luego en el archivo database.yml:

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

Estos son los ste ps que he compilado para Centos 5.3. Me costó un montón de prueba y error hacer que esto funcione. Es de una instalación de Centos completamente limpia.

Instalar EPEL:

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

Instalar rubí, rubygems, freetds, unixODBC, herramientas de desarrollo:

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

install rails:

gem install rails 

Instalar gemas relacionadas DB:

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

Descarga, construir e instalar 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 

lista joya final:

# 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) 

se pueden utilizar diversas herramientas como isql para probar la conexión ODBC. La publicación de Brian lo cubre con todo lujo de detalles, así que no repetiré. En los carriles se necesita un database.yml que se ve algo como esto:

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

En Ubuntu, que utiliza FreeTDS y la gema activerecord-sqlserver-adaptador.

Puede instalar FreeTDS a través de apt:

sudo apt-get install freetds 

y añadir a su Gemfile:

gem 'activerecord-sqlserver-adapter' 

que tenía que cambiar el número de versión FreeTDS configurado en /etc/freetds/freetds.conf a 8.0 con el fin de hacer las cosas trabajando correctamente

[global] 
    tds version = 8.0 

activerecord-sqlserver-adapter on GitHub

FreeTDS project

Cuestiones relacionadas