12 Ноя

Подключение к БД MSSQL через ActiveRecord

В общем, понадобилось мне в одном проектике подключаться к двум базам данных одновременно. Причём одна из них должна быть локальная MySQL, а вторая удалённая MSSQL. Информации по этой теме нетак уж и много, особенно на русском языке, поэтому я запишу сюда себе всё ж.

В общем, сначала я столкнулся с проблемой несостыковки кодировок в MySQL. Если заношу данные в базу (и считываю их потом оттуда) на английском языке — то всё нормич, а вот как только дело доходит до русского — приложение Sinatra сразу вылетает с ошибкой. Текст ошибки я сейчас уже не помню, но гугление помогло мне и в итоге я нашел инфу, что для подключения к MySQL необходим адаптер не mysql, как могло сначала показаться, а mysql2. Да не просто mysql2, а ещё и определенной версии. В общем, в моём приложении Gemfile стал выглядеть вот так:

 gem "sinatra"
 gem 'mysql2', '~> 0.3.18'
 gem "activerecord"
 gem "sinatra-activerecord"
 gem "sinatra-contrib"

Далее передо мной возникла проблема подключения к базе MSSQL, в общем, с горем пополам тоже нашел инфу, что для подключения к MSSQL нужны ещё два гема. В итоге Gemfile пополнился ещё двумя строчками:

gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter', '~> 4.2.0'

Читать далее

12 Ноя

Соединение с несколькими БД с использованием ActiveRecord

В общем, с Ruby у меня пошло как-то получше, чем ранее с python’ом и фреймворком Yii2.
Смотрю тут всякие видеоуроки, читаю книги, уже немного фигачу всякие мелочи с использованием Sinatra и ActiveRecord.
Вот понадобилось тут из одного приложения создавать подключения к нескольким базам данных. Искал всякие варианты — ничего толком не нашел. Там вроде можно как-то конфиги указывать в database.yml, но у меня не получилось. Зато получилось вот так:
для начал нам потребуется собственно сам activerecord

в файле app.rb — основной файл приложения Sinatra, — прописываем следующее:

require 'rubygems'
require 'sinatra'
require 'sinatra/activerecord'

ActiveRecord::Base.configurations["mysql1"] = {
:adapter => "mysql2",
:host => "localhost",
:username => "username",
:password => "userpassword",
:database => "databasename",
:encoding => "utf8"
}

ActiveRecord::Base.configurations["mysql2"] = {
:adapter => "mysql2",
:host => "localhost",
:username => "username",
:password => "userpassword",
:database => "oher_databasename",
:encoding => "utf8"
}

А далее в коде при создании класса с нашей моделью прописываем вот так:

class Table1 < ActiveRecord::Base
establish_connection "mysql1"
end

class Table2 < ActiveRecord::Base
establish_connection "mysql2"
end

Вот и всё. После этого у меня приложение заработало нормально.

Немного позже напишу ещё о том, как подключиться к базе MSSQL из синатры (если, конечно, получится).