Мне нужно позволить моему приложению Rails подключиться к базе данных MS SQL Server и выполнить простой запрос для поиска. Основная БД для приложения - MySQL. Это просто нужно сделать эту вещь SQL Server на стороне.
Какой лучший способ сделать это?
Я мог бы написать совершенно отдельное приложение на Java, которое подключается к БД и выгружает некоторые XML-данные в файловую систему, чтобы мое приложение Ruby могло их забрать.
Или я мог бы возиться с подключением Ruby ODBC. Я сделал поиск на Gemcutter и нашел эти ...
- dbd-odbc (0.2.5) 11141 скачиваний
- ruby-odbc (0.99992) 6390 загрузок
- activerecord-odbc-adapter (2.0) 2333 загрузки
- odbc-rails (1.5) 2167 загрузок
Это будет означать подключение к двум разным БД из одного приложения Rails. Я даже не уверен, как это сделать.
У кого-нибудь есть опыт работы с SQL Server в Ruby? Есть мысли о том, какой подход наиболее практичен?
ОБНОВЛЕНИЕ - все заработало
Спасибо за помощь. Основываясь на ответах и некоторых исследованиях, я решил это. Я собираюсь вставить свои заметки ниже. Извините за случайный тон. Я просто скопировал их.
Действия, предпринятые для подключения к SQL Server с Ruby в OS X
Скачать, настроить, собрать библиотеку FreeTDS
Документы довольно подробные и четко написаны, в основном. В критических местах есть несколько проблем, которые стоят мне несколько часов на устранение неисправностей.
По умолчанию он устанавливается в /usr/local/freetds/lib
.
Это дает вам кучу утилит и прочего. Они могут помочь с тестированием и устранением неисправностей.
Например, из документов: «Утилита tsql предоставляется как часть FreeTDS специально для устранения неполадок».
Добавил это в / etc / profile:
# 2010-10-19
# To support the FreeTDS library for connecting Ruby to SQL Server.
PATH=$PATH:/usr/local/freetds/bin
# Have FreeTDS to log some output.
#export TDSDUMP=/tmp/freetds.log
#export TDSDUMPCONFIG=/tmp/freetdb_config.log
export PATH
Файл конфигурации FreeTDS
Необходимо создать файл конфигурации для FreeTDS. Документы перечисляют несколько мест, где это может быть сохранено. Единственный, кто работал на меня, был ~/.freetds.conf
...
[DATA_SERVER_NAME]
host = hostname
port = 1433
tds version = 8.0
Вот и весь конфиг. Для [DATA_SERVER_NAME]
вы не можете использовать имя хоста, иначе оно не будет работать. Используйте интуитивно понятное логическое имя. Вы будете использовать это имя, когда подключитесь к нему внутри кода Ruby с помощью гема tiny_tds
.
Не нужно настраивать ODBC
Несмотря на то, что сказано в документации FreeTDS, нет необходимости создавать файл odbc.ini или odbcinst.ini. Работает без него.
Установлен крошечный драгоценный камень
Gem tiny_tds
соединяет Ruby с FreeTDS с базой данных SQL Server. В tiny_tds
документах написано ...
'... пожалуйста, не забудьте скомпилировать FreeTDS с поддержкой libiconv, чтобы кодировки работали наилучшим образом. Запустите «tsql -C» в консоли и проверьте «iconv library: yes». '
Я смог это сделать, и это сработало.
Он должен работать так:
require 'tiny_tds'
client = TinyTds::Client.new(:username => '...username...', :password => '...password...', :dataserver => 'DATA_SERVER_NAME')
sql = '... whatever ...'
result = client.execute(sql)
client.close
ActiveRecord
Предположительно, вы можете использовать ActiveRecord с SQL Server после того, как вы все настроите, установив гем activerecord-sqlserver-adapter
. Мне это не нужно, поэтому я не установил его.