Борьба с утечкой памяти в ruby (mephisto и sqlite)

24 Dec 2006


Пока мой блог развивается и читателей у меня не сильно много, позволяю себе немного заняться его наворачиванием и переделкой.

В очередной раз решился побороть проблему утечки памяти движка моего блога typo. Суть в том, что по непонятным для меня причинам, rails движок этот тек самым наглым образом (до 200 Мб за сутки).
Обидно было больше потому, что на хостинге крутятся еще несколько проектов на rails и у них с памятью все стабильно. В общем долго я плевался на этот typo и решил в итоге попробывать перейти на новый и активно развивающийся движок Mephisto.

Мой Typo работал на sqlite базе и поэтому Mephisto я решил ставить тоже на sqlite.
Но какое было разочарование после вечера ковыряний и переделываний… Mephisto также противно тек.

Отдельно хочу написать о впечатлениях о Mephisto.
Движок уже довольно обкатанный, работает нормально. Из typo сконвертировался на раз. Все делал по доке Converting Typo to Mephisto из официальной wiki.
Есть уже неплохой набор тем, из которых можно намостырить что-то свое.
Единственной проблемой после перехода на Mephisto были поломанные slug у каждого поста. Их видать скрипт переноса тупо ставит в значение title. А русский, как известно, в урлах отображается не совсем читабельно :-)

Возвращаясь к теме утечки памяти оказалось, что виноват в этом не typo, а ruby sqlite бекенд к базе. Обидно, но нашел я эту информацию как раз в рассылке Mephisto.
После этого я решил сменить базу с sqlite на postgresql и остаться на typo.
Но тут оказалось не все так просто. Почему-то база у меня никак не смогла встать красиво. Нехватало sequences в postgresql schema.
У меня в запасе были еще два способа добиться результата. Я решил пойти самым простым. Сконвертировал базу в MySQL. Её schema была в порядке.

Перенос данных очень удобно делать с помощью скрипта из комплекта Rail Application Installer, называется rails-backup и rails-restore.
Данные конвертируются в YAML и потом восстанавливаются в любую базу.
Конвертация прошла успешно и я жду что текучка закончится. Если нет, то в запасе есть еще одна идея :-)
В дебаггер совсем не хочется лезть :-) надеюсь обойдется.

Update: Вторым и последним способом был установка Mephisto на Postgresql, но все обошлось. Так что блог остается под управлением Typo и на базе MySQL.