Эх, генерация статического контента. Священный Грааль самиздата.
Ошибка действительно может оказаться в runtime Ruby. Вспоминая из опыта как OpenSSL обвязка в Ruby сначала иногда падала в случайный момент времени, а после - просто иногда вставала колом и останавливала исполнение всех потоков.
Не-освобождение памяти само по себе может привести к такому эффекту на динамических языках. Как то эксплуатировал в промышленных маштабах одну систему на Python - после нескольких сотен тысяч соединений выедало всю память и останавливалось (даже не падало). Впоследствии - разработчики обнаружили ошибку в обработке завершённых SASL/TLS-сессий и теперь система работает как часы.