У меня есть приложение 3.0.7, использующее активный эшафот от github vhochstein/master. Я использую совместимую версию 3.x, которая может использоваться как поставщик/плагин, а не требует установки gem.ActiveScaffold дает слишком глубокую ошибку стека; не удается найти рекурсию
В процессе производства он попадает в ActionView :: Template :: Error (уровень слишком глубокий) :.
[email protected]:~/beaumont/current$ script/rails server -p 4000
ActionView::Template::Error (stack level too deep):
8: depth = Kernel.caller.count
9: logger.info "pagination: #{@page} #{depth}"
10: %>
11: <%= render :partial => 'list_pagination_links', :locals => { :current_page => @page } if @page.pager.infinite? || @page.pager.number_of_pages > 1 %>
12: </div>
13: <br clear="both" /><%# a hack for the Rico Corner problem %>
14: </div>
Я начал глядя на некоторые рекурсии в моем коде, а затем цикл в моей модели данных, которая была завинчивания до AS. Это произошло сначала с mod_passenger, но это также происходит с сервером script/rails, запущенным на сервере. (Это моя бета-тестовая машина)
Он всегда умирает в визуализированном поставщике/плагинах/active_scaffold/frontends/default/views/_list_pagination.html.erb (144.3ms 157). Я взломал ActionView, чтобы зарегистрировать Kernel.caller.count, чтобы я мог видеть, растет ли стек и растет, но я этого не вижу. Я вижу, что глубина стека достигает 180. Не кажется важным, если бы я увеличил стек до начала рельсов, но, возможно, что-то снова удалит стек.
В _list_pagination.html.erb он вызывает list_pagination_links. Если я прокомментирую эти звонки, тогда все не получится. Я пробовал сделать list_pagination_links ничего не делать (не имея в нем кода!), Но он все еще умер при этом вызове рендеринга. Интересно, действительно ли это в коде рендеринга, что стек либо рекурсивный, либо просто слишком большой.
Это не происходит на моем ноутбуке (debian sequeeze, 32-bit) в режиме разработки, но происходит на моей бета-машине (XEN VM, 32-разрядная, debian squeeze). Это происходило на моем ноутбуке время от времени, но не повторяется, и перезапуск рельсов «решает» проблемы. Я еще не пробовал режим производства на моем ноутбуке, и я также подозреваю, что он может зависящим от данных!