我有一個3.0.7應用程序使用主動腳手架從github vhochstein/master。我正在使用可用作供應商/插件的3.x兼容版本,而不需要進行寶石安裝。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服務器上。 (這是我的beta測試機器)
它總是死在呈現供應商/插件/ active_scaffold /前端/默認/ views/_list_pagination.html.erb(144.3ms 157)。 我篡改了ActionView來記錄Kernel.caller.count,這樣我就可以看到一個堆棧正在增長和增長,但我沒有看到這個。我確實看到堆棧深度高達180. 在啓動rails之前,如果ulimit -s的堆棧更大,似乎並不重要,但也許有些東西會將堆棧再次限制回來。
在_list_pagination.html.erb中,它調用list_pagination_links。如果我評論這些電話,那麼事情就不會失敗。我試着讓list_pagination_links什麼都不做(沒有編碼!),但它仍然在那個渲染調用中死亡。我想知道是否在渲染代碼本身中,堆棧要麼遞歸,要麼只是太大。
這在我的筆記本電腦(debian sequeeze,32-bit)上沒有發生在開發模式中,但在我的測試版生產機器上發生(XEN VM,32位debian squeeze)。它確實發生在我的筆記本電腦上,但不是以可重複的方式發生,並且重新啓動軌道「解決」了問題。 我還沒有試過我的筆記本電腦上的生產模式,我也懷疑它可能是數據依賴!