2009-04-06 6 views

Répondre

11

Ce que je:

D'ici: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master

Installation

D'abord, vous aurez besoin Ruby et Ruby DBI ODBC. A ma connaissance le DBO ADO pour DBI n'est plus supporté. L'installation ci-dessous n'est pas une marche complète sur la façon d'obtenir toutes les pièces mobiles nécessaires comme FreeTDS installé et/ou configuré. Il assumera également les installations de gem des bibliothèques dépendantes et de l'adaptateur lui-même.

Il convient de noter que cette version de l'adaptateur a été développée en utilisant à la fois l'ancienne version 0.0.23 de DBI jusqu'à la version stable actuelle de 0.4.0. Parce que les versions ultérieures de DBI vont changer beaucoup de choses, IL EST FORTEMENT RECOMMANDÉ que vous installiez au maximum la version 0.4.0 que les exemples ci-dessous montrent. Pour le moment, nous ne supportons pas les versions de DBI supérieures à 0.4.0. Les bonnes nouvelles sont que si vous utilisiez un très vieux DBI avec ADO, techniquement cet adaptateur fonctionnera toujours pour vous, mais soyez averti que votre chemin devient vieux et peut ne pas être soutenu longtemps.

$ 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 

D'ici: http://lambie.org/2008/02/28/connecting-to-an-mssql-database-from-ruby-on-ubuntu/

Tout d'abord, mettre à jour votre ~/.profile inclure les éléments suivants:

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

Puis recharger votre .profile, en vous déconnectant et à nouveau.

Deuxièmement, sur Ubuntu 7.10 Server, j'avais besoin d'installer des paquets.

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

Avec FreeTDS INSTALLÉ je pouvais le configurer comme ceci:

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

L'important est ici ACUMENSERVER, qui est la source de données que je vais utiliser lors de la connexion à la base de données. L'hôte et le port s'expliquent d'eux-mêmes, et il vaut la peine de noter que j'ai dû utiliser spécifiquement la version 7.0 en tant que version tds.

Test FreeTDS est pas trop difficile:

[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 

Ensuite il est nécessaire de configurer 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 

J'ai ensuite testé la connexion avec 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, nous avons donc ODBC en utilisant FreeTDS pour se connecter à un serveur MSSQL distant. Tout ce qui reste est d'ajouter Ruby dans le mélange.

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

La dernière chose à tester est que Ruby peut utiliser DBI et ODBC pour frapper la base de données réelle, et qui est facile à tester:

[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 

Et un test plus complet (uniquement avec SQL SELECT, vous l'esprit):

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

A partir de là (pour fixer le odbc lib étant au mauvais endroit): 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. 

fonctionne de toute façon lors de l'accès MSSQL à l'invite

isql -v $dsn $user $passwd 

i trouvé cela utile

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

Et puis dans le fichier database.yml:

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

Ce sont les ps j'ai compilé pour Centos 5.3. Il m'a fallu beaucoup d'essais et d'erreurs pour que cela fonctionne. C'est à partir d'une installation Centos complètement propre.

Installer EPEL:

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

Installation rubis, rubygems, freetds, unixODBC, outils de développement:

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

Installation des rails:

gem install rails 

Installer DB gemmes liées:

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

Téléchargez, construire et installer 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 finale:

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

Vous pouvez utiliser divers outils comme isql pour tester votre connexion ODBC. Le post de Brian couvre cela dans les moindres détails, donc je ne le répéterai pas. Dans des rails, vous avez besoin d'une database.yml qui ressemble à ceci:

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

Sur Ubuntu, j'utilise FreeTDS et la pierre précieuse activerecord-SQLServer adaptateur.

Vous pouvez installer FreeTDS par apt:

sudo apt-get install freetds 

Et ajoutez ceci à votre Gemfile:

gem 'activerecord-sqlserver-adapter' 

je devais changer le FreeTDS configuré le numéro de version dans /etc/freetds/freetds.conf à 8.0 afin de faire avancer les choses fonctionne correctement.

[global] 
    tds version = 8.0 

activerecord-sqlserver-adapter on GitHub

FreeTDS project

Questions connexes