Костыль для Redmine

Введение

Redmine — отличная система управления проектами, написанная на ruby. Система бесплатная и с открытым исходным кодом. Устанавливается как на Unix так и на Windows. Redmine поддерживает работу с MySQL, PostgreSQL и SQLite. Отличное решение для малых и средних проектов.

Благодаря ребятам из Bitnami у нас есть замечательный пакет «все в одном», который устанавливает все необходимое, мы получаем рабочий redmine с минимальным количеством телодвижений. Скачать его можно здесь.

Система работает следующим образом. Устанавливаются 2 сервера Mongrel для выполнения самого redmine. Доступ к этим серверам разрешен только локально. Для обеспечения доступа из сети устанавливается apache c балансировкой между этими двумя серверами.

Используя redmine я столкнулся только с одной проблемой — через некоторое время бездействия (порядка 6 часов), он перестает работать. Помогает перезапуск сервера, и пляска по разным адресам в redmine, тогда, через некоторое время, он заводится и работает до следующего простоя.

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

ActiveRecord::Base.verification_timeout = 14400

К сожалению, в руби я не разбираюсь, и добавление этой строчки в первом попавшемся файле в папке redmine\config\initializers, ситуацию не изменило.

Костыль

Я не люблю делать костыли, но в данном случае другого решения проблемы не вижу. Решение напрашивается само собой — нужно чтобы что-то постоянно, с небольшим периодом, опрашивало redmine.

Для этого я написал небольшую утилитку. Все что она делает — запрос при запуске на адрес, указанный в аргументах командной строки. Запускать ее будет стандартный планировщик заданий.

Создаем задачу

Задачу надо начинать выполнять при запуске системы и вечно повторять через некоторый промежуток времени (я выбрал один час). Не забудьте назвать задачу. Следующим шагом добавляем триггер (условие запуска):

Добавляем действие. В действиях выбираем нашу утилиту, прописываем путь к сайту, который нужно периодически запрашивать.

Почти все готово. Если задачу выполнить принудительно через контекстное меню она не повторяется — перезагружаем систему.

Теперь Redmine доступен всегда 🙂

Утилиту можно скачать здесь (6кб, нужен .Net Framework 2.0 или выше)