Вам приходилось подключаться к SQL Server с помощью ActiveRecord? Это возможно? Может ли кто-нибудь указать некоторые отправные точки?
Подключение к SQL Server с помощью ActiveRecord
Ответ 1
Это то, что я использовал:
Отсюда: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master
Установка
Сначала вам понадобятся Ruby DBI и Ruby ODBC. Насколько мне известно, ADD DBD для DBI больше не поддерживается. Ниже приведена не полная информация о том, как получить все необходимые движущиеся части, такие как FreeTDS, которые установлены и/или настроены. Он также предполагает установку gem как зависимых библиотек, так и самого адаптера.
Следует отметить, что эта версия адаптера была разработана с использованием как старой версии DBI 0.0.23, так и текущей стабильной версии 0.4.0. Поскольку более поздние версии DBI будут меняться во многих вещах, ЭТО ВЫСОКО РЕКОМЕНДУЕТСЯ, что вы установите максимальную установку до версии 0.4.0, приведенную ниже в примерах. Пока мы не поддерживаем версии DBI выше 0.4.0. Хорошей новостью является то, что если вы используете очень старый 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 мне нужно было установить несколько пакетов.
[email protected]:~$ sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc
С установкой FreeTDS я могу настроить его следующим образом:
[email protected]:/etc/freetds$ cat freetds.conf
[ACUMENSERVER]
host = 192.168.0.10
port = 1433
tds version = 7.0
Важным здесь является ACUMENSERVER, который является DSN, который Ill использует при подключении к базе данных. Хост и порт не требуют пояснений, и стоит отметить, что мне пришлось использовать 7.0 именно как версию tds.
Тестирование FreeTDS не слишком сложно:
[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
Затем необходимо настроить 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
Затем я тестировал соединение с 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
ОК, поэтому мы получили ODBC, используя FreeTDS для подключения к удаленному серверу MSSQL. Все, что осталось - добавить Ruby в микс.
[email protected]:~$ sudo aptitude install libdbd-odbc-ruby
Последнее, что нужно проверить, - это то, что Ruby может использовать DBI и ODBC для доступа к фактической базе данных, и это легко проверить:
[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
И более полный тест (только с 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=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.
в любом случае работает при доступе к 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
Ответ 2
Это шаги, которые я собрал для 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
Установите связанные с БД драгоценные камни:
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. Сообщение Брайана об этом прекрасно освещает, поэтому я не буду повторять. В rails вам нужна database.yml, которая выглядит примерно так:
development:
adapter: sqlserver
mode: odbc
dsn: dsnName
username: username
password: password
Ответ 3
В Ubuntu я использую FreeTDS и gemer-serverserver-sqlserver-адаптер.
Вы можете установить FreeTDS через apt:
sudo apt-get install freetds
И добавьте это в свой Gemfile:
gem 'activerecord-sqlserver-adapter'
Мне пришлось изменить настроенный номер версии FreeTDS в /etc/freetds/freetds.conf
на 8.0
, чтобы заставить вещи работать правильно.
[global]
tds version = 8.0