Возможно, ваш mysql-сервер не запущен
, вы можете попробовать
/usr/local/bin/mysql.server start
blockquote >
Ruby использует стек C, таким образом, Ваши опции включают использование ulimit или компиляцию Ruby с некоторым флагом размера стопки компилятора/компоновщика. Хвостовая рекурсия должна все же быть реализована, и текущая поддержка Ruby рекурсии не настолько большая. Поскольку прохладная и изящная рекурсия, Вы могли бы хотеть рассмотреть преодоление ограничений языка и написание Вашего кода по-другому.
Yukihiro записи Мацумото здесь
Ruby использует стек C, так, чтобы Вы использовали ulimit для определения предела на глубину стека.
Если Вы уверены, что у Вас нет ситуации с Бесконечной рекурсией затем, Вашему алгоритму pobably не удовлетворяют, чтобы Ruby выполнил его recirsive способом. Преобразование алгоритма от рекурсии до другого вида стека довольно легко, и я предлагаю, чтобы Вы попробовали это. Вот то, как можно сделать это.
def recursive(params)
if some_conditions(params)
recursive(update_params(params))
end
end
recursive(starting_params)
преобразует в
stack = [starting_params]
while !stack.empty?
current_params = stack.delete_at(0)
if some_conditions(current_params)
stack << update_params(current_params)
end
end
Думайте о том, что продолжает код. Поскольку другие плакаты упомянули, что возможно взломать код C интерпретатора.как бы то ни было. Результат будет состоять в том, что Вы используете больше RAM и не имеете никакой гарантии, что Вы не унесете стек снова.
действительно хорошее решение состояло бы в том, чтобы придумать итеративный алгоритм для того, что Вы пытаетесь сделать. Иногда memoisation может помочь, и иногда Вы находите, что не используете материал, Вы спешите стек, в этом случае, можно заменить рекурсивные вызовы изменяемым состоянием.
, Если Вы плохо знакомы с этим видом материала, взглянули на SICP здесь для некоторых идей...