Ruby/Rails => ActiveRecord SQL Server Adapter => DBI Gem w/DBD-ODBC => Ruby ODBC => unixODBC => FreeTDS => MSSQL Server.
Так как мне это нужно только для временого доступа к разным серверам то я использую проброс портов через ssh
$ ssh -L 1433:mssqlserver.mydomain:1433 login@myhostпоэтому вместо имени сервера я использую localhost
для начала ставим xcode с установочного диска и ports
или обновляем
$ sudo port selfupdateВсе настройки я описываю для ruby 1.8.7
Проверяем версию руби
$ ruby -vи обновляем при необходимости
$ sudo port install rubyставим gem
$ sudo port install rb-rubygemsтеперь переходим к установке unixODBC и FreeTDS
$ sudo port install unixODBCставим необходимые gem
$ sudo port install freetds +odbc
$ sudo gem install dbi -v 0.4.1на время написания статьи необходимо подправить Portfile для rb-odbc
$ sudo gem install dbd-odbc -v 0.2.4
$ sudo gem install activerecord-sqlserver-adapter
$ port file rb-odbc | xargs mateТеперь в открывшемся TextMate правим
0.9995 на 0.9997
и соответственно правим MD5 на 36d21519795c3edc8bc63b1ec6682b99
у меня получилось
# $Id: Portfile 30250 2007-10-23 02:16:17Z jmpp@macports.org $После сохранения файла можно ставить ruby ODBC
PortSystem 1.0
PortGroup ruby 1.0
ruby.setup {odbc ruby-odbc} 0.9997 extconf.rb {README doc test}
maintainers nomaintainer
description An extension library for ODBC from ruby.
long_description Extension library to use ODBC data sources from Ruby. \
Supports Ruby 1.6.x and 1.8 on Win32 OSes and UN*X
checksums md5 36d21519795c3edc8bc63b1ec6682b99
homepage http://www.ch-werner.de/rubyodbc
master_sites http://www.ch-werner.de/rubyodbc
categories-append databases
platforms darwin
variant utf8 {
configure.args-append -Cutf8
}
$ sudo port install rb-odbc +utf8Теперь настраиваем FreeTDS
$ mate /opt/local/etc/freetds/freetds.confя добавил в конец файла
[my_dev_server]После этого настраиваем unixODBC
host = localhost # я использую проброс портов
port = 1433
tds version = 8.0
port = 1433
client charset = UTF-8 # у меня серваки отдают win1251 а в рельсах utf-8
$ sudo cp /opt/local/etc/odbc.ini.dist /opt/local/etc/odbc.iniвставляем
$ sudo cp /opt/local/etc/odbcinst.ini.dist /opt/local/etc/odbcinst.ini
$ mate /opt/local/etc/odbcinst.ini
[FreeTDS]теперь очередь за настройкой DSN
Decscription = FreeTDS driver for SQLServer
Driver = /opt/local/lib/libtdsodbc.so
Setup = /opt/local/lib/libtdsodbc.so
FileUsage = 1
$ mate /opt/local/etc/odbc.iniвот например мой
[my_dev_server_dsn]теперь очередь за database.yml в приложении
Driver=FreeTDS
Description=My Server Connection
Servername=my_dev_server
Server=my_dev_server
Port=1433
Database=mssql-database
например
development-mssql:
adapter: sqlserver
mode: ODBC
username: user
password: secret
database: mssql-database # возможно достаточно настроек dsn
dsn: my_dev_server_dsn
Все работает.
На самом деле я использую модель и rake task для импорта данных в рельсовое приложение т.е. только на этапе разработки.
Комментариев нет:
Отправить комментарий