13 Мар

Настройка подключений к нескольким базам данных в Rails.

Решил сделать перевод на русский язык статьи Setting up multiple databases in Rails: the definitive guide

(By Roberto Ostinelli / December 2, 2015).

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

Статья написана для Rails 4, но работает и в Rails 5 тоже, по крайней мере, на момент перевода статьи. 

———————

Может быть множество разных причин, зачем вам может понадобиться подключение к нескольким базам данных в вашем Ruby in Rails приложении. В моём случае необходимо было хранить большое количество данных, отражающих поведение пользователя: клики, посещаемые страницы, изменения истории и т. д.

Такие типы баз данных обычно не критичны для основной цели, а разрастаются намного быстрее (и до гораздо бОльших размеров), чем другие БД.

Требования к ним достаточно разнообразны: к примеру, они требуют больше пространства, более терпимы к аппаратным и программным сбоям, а также у них в приоритете идёт запись в базу, а не чтение. По этим причинам иногда выгодно отделить такие БД от основной базы вашего приложения. Зачастую для таких задач используются нереляционные СУБД, что уже выходит за пределы темы, по которой писалась данная статья.

Я нашел и прочитал множество различных решений, но я так и не смог найти такого, которое бы полностью выполняло следующие условия:

  • Должны быть различные и изолированные друг от друга миграции и схемы для каждой базы данных
  • Должны использоваться генераторы Rails для создания новых миграций для каждой БД, независимо друг от друга
  • Должны присутствовать специфические для баз данных задания rake для основных операций над БД (например такие же, как и для основной БД)
  • Должна быть интеграция с заданиями spec RSpec’а.
  • Должно работать с Database Cleaner
  • Должно работать на Heroku

Это мой взгляд на то, как удовлетворить все вышеуказанные требования и получить полностью рабочее Rails-приложение с подключением к нескольким БД.

Читать далее

08 Авг

Ошибка при установке Passenger

Каждый раз сталкиваюсь с этой проблемой и каждый раз забываю, в чём причина.
После установки Passenger и попытке запуска passenger-install-apache2-module выскакивает примерно следующая ошибка:
`method_missing': undefined method `this' for #<Gem::Specification:0x4db6d12 … бла-бла-бла
Код ошибки может отличаться и ситуация может быть другой.
Решение следующее:
достаточно выполнить следующую команду
gem update --system 2.4.8 --no-ri --no-rdoc

Этой командой мы апдейтим апдейтер до нужной нам версии.
Такие дела.

05 Мар

Ruby-скрипт в cron

Для работы понадобилось как-то написать небольшой скриптик по парсингу XML-ки и поставить его на выполнение в крон каждый вечер. Сам скрипт написать не проблема. «Да и в крон поставить нефиг делать», — подумал я. Но не совсем.

Поставил в крон. Проверяю в назначенное время — не работает.

Сделал вывод в логи, посмотрел, что там не так. Оказывается, не может найти руби. Ну ладно, прописал полный путь к рубям.

Не работает.

Смотрю логи — теперь не может загрузить Nokogiri. Мудился-мудился, искал варианты, витоге всё-таки нашел, в чем магия. Оказывается нужно было в крон прописать всякие системные переменные для рубей. Либо вручную, либо при помощи команды rvm cron setup.
Попробовал — наконец-то заработало!
Такие дела.

15 Янв

Проблема с bootstrap в продакшене RoR

После установки на рельсы bootstrap из вот этого репозитория столкнулся с проблемой, что не подгружаются ассеты при развертывании приложения в продакшен. То есть css и js просто не подгружаются. Совсем.
Версия руби: ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

Версия рельс: Rails 4.2.5

В итоге наткнулся на stackoverflow на тему с такой же проблемой, где советуют сделать прописать следующие параметры в файле %rails_app%/config/environments/production.rb

config.assets.compile = true
config.assets.precompile = ['*.js', '*.css', '*.css.erb']

Ну я и прописал. Но, как обычно, ничего никогда не проходит гладко. Поэтому после этого у меня выскочила ошибка:
Undefined variable: "$alert-padding".
Немного погуглив, нашел решение, что строку

config.assets.precompile = ['*.js', '*.css', '*.css.erb']

всё же лучше убрать, оставив только

config.assets.compile = true

Ну и после этого всё нормально заработало (пока что). Впрочем, сейчас всё равно пока переключусь на development.

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'

Читать далее