2012-12-03 34 views
10

在我的RoR應用程序的開發機器(本地服務器,OSX 10.8.1,紅寶石1.9.3,3.2.8的Rails)一個奇怪的現象開始出現憑空(當然...):在服務器運行時通過更改文件觸發SystemStackError?

Rails的服務器崩潰(所有路由都殺了,服務器重新啓動是讓它再次合作的唯一途徑)與以下記錄:我用Google搜索,發現SystemStackError通常是由於一個無限循環

SystemStackError (stack level too deep): 
    actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:70 


    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.9ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms) 
    Rendered /Users/dekay/.rvm/gems/[email protected]/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.7ms) 

,但據因爲我可以跟蹤它,所以我的代碼中沒有這樣的循環。錯誤似乎並不在應用程序邏輯的某個步驟中。

服務器崩潰和我的行動之間的唯一關聯是:

  1. 變化的應用
  2. 重新加載應用程序
  3. 熱潮,服務器了,錯誤信息的當前網頁的一些代碼。在此之後
  4. 沒有頁面工作,錯誤是:

    路由錯誤

    沒有路由匹配[GET] 「/」

    嘗試運行耙路線可用路由的詳細信息。

任何人都可以點我在正確的方向來調試這一點,好嗎? PS:我懷疑它發生在粗心的「軟件包更新」之後。這可以嗎?

+0

您使用的是什麼寶石?您是否在ActiveSupport/ActiveDispatch/etc中使用任何方法?您還使用了哪種補丁版本的Ruby? – Novae

+0

我在Rails 3.2.11和ruby 1.9.3-p385上看到了這個。 Gemenv:https://gist.github.com/coneybeare/4957822 Gemfile.lock:https://gist.github.com/coneybeare/4957828 – coneybeare

回答

2

rails app中調試stack level too deep錯誤消息並不容易,因爲錯誤可能是由於各種原因造成的,並且錯誤消息不是太有用。

一些導致stack level too deep error的原因:

  1. 不一致的應用程序的gems & plugins and any other dependencies
  2. Code syntax error
  3. applying db migrations erroneously造成的不一致。

如果錯誤是在系統啓動時發生的事情,那麼這個技巧將是非常有用的:http://www.datatravels.com/technotes/2012/07/11/awesome-debugging-for-rails-boot-stacklevel-too-de/

從描述,它看起來像應用了一段時間工作正常,然後開始崩潰 - 所以上面的啓動情況可能不適用。到去搞清楚這個問題

一種方式是通過使用printf debugging

而且具體line/block of code這是造成錯誤隔離,這可能是值得的回退更改,並讓系統恢復到工作狀態,然後逐漸放回更改以隔離根本原因。

在這種情況下,很可能bundle update確實觸發了錯誤;因此檢查新添加的依賴關係並查看它們是否可能是罪魁禍首會是一個好主意。

+0

謝謝你的回答。真奇怪的是,它似乎在重新加載器中發生,當我在本地修改文件時,服務器沒有收到該文件,似乎崩潰了。當我部署到heroku時,這根本不會發生。 – danieldekay

+1

Heroku部署強制重新啓動服務器;所以錯誤不會發生在那裏可能並不令人驚訝。重新啓動後,本地應用程序是否繼續正常工作?或者它會在一段時間後恢復與相同的錯誤失敗? –

+0

本地應用運行良好,如果我不更改任何文件「正在運行的系統下」。在應用程序運行時更改文件是安全的,我只需重新加載網頁即可獲得新內容。 – danieldekay

相關問題