Соединение с SQL Server с ActiveRecord

Попробуйте вместо этого. Я не проверял это, но это выглядит хорошо для меня:

13
задан John Saunders 12 August 2009 в 02:06
поделиться

2 ответа

Это, что я использовал:

Отсюда: http://github.com/rails-sqlserver/2000-2005-adapter/tree/master

Установка

Во-первых, Вам будет нужен Ruby DBI и Ruby ODBC. К моему знанию больше не поддерживается DBD ADO для DBI. Установка ниже не является всесторонним обходом через о том, как получить все необходимые подвижные части как FreeTDS, установленный и/или настроенный. Это также примет установки драгоценного камня и зависимых библиотек и самого адаптера.

Нужно отметить, что эта версия адаптера была разработана с помощью обоих древние 0.0.23 версии DBI до текущей стабильной версии 0.4.0. Поскольку более поздние версии DBI будут изменять много вещей, IT НАСТОЯТЕЛЬНО РЕКОМЕНДОВАН это Вы макс. Ваша установка на версии 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 я должен был установить некоторые пакеты.

mlambie@ubuntu:~$ sudo aptitude install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc 

С FreeTDS, установленным, я мог настроить его как это:

mlambie@ubuntu:/etc/freetds$ cat freetds.conf
[ACUMENSERVER]
  host = 192.168.0.10
  port = 1433
  tds version = 7.0

Важной вещью здесь является ACUMENSERVER, который является DSN, который я буду использовать при соединении с базой данных. Хост и порт очевидны, и стоит отметить, что я должен был использовать 7.0 конкретно в качестве tds версии.

Тестирование FreeTDS не слишком трудно:

mlambie@ubuntu:~$ 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:

mlambie@ubuntu:/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

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

Я затем протестировал соединение с isql:

mlambie@ubuntu:~$ 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 в соединение.

mlambie@ubuntu:~$ sudo aptitude install libdbd-odbc-ruby

Последняя вещь протестировать состоит в том, что Ruby может использовать DBI и ODBC для удара фактической базы данных, и это легко протестировать:

mlambie@ubuntu:~$ 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, обратите внимание):

#!/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
11
ответ дан 2 December 2019 в 00:32
поделиться

Это шаги, которые я скомпилировал для 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
2
ответ дан 2 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: