2012-04-02 116 views
4

我在生產中運行我的應用程序,診斷500錯誤非常困難。我之前已經開始工作了,但是在通過Capastrano重新部署後,我無法完成此任務。如何正確診斷500錯誤(Rails,Passenger,Nginx,Postgres)

這裏是事實:

  1. 服務器是安裝nginx的+乘客,和我使用PostgreSQL的 。
  2. 靜態資產工作正常,因爲我可以在瀏覽器中正常訪問它們。
  3. 我可以通過RAILS_ENV=production bundle exec rails console訪問rails控制檯並執行活動記錄操作(如 從數據庫中檢索數據)。
  4. 在控制檯內,我可以運行app.get("/"),它也返回一個500錯誤(首先顯示運行的查詢以加載 模型)。
  5. production.log文件從不寫入。我已經爲它設置了權限777。我還將日誌級別設置爲 :調試時沒有任何顯示。
  6. nginx日誌(乘客也使用)沒有顯示錯誤,它只是通知緩存未命中。

由於沒有使用任何記錄,我不知道該怎麼辦。我已經嘗試在整個應用程序目錄中設置完整權限而沒有任何幫助。重新啓動服務器多次,沒有任何東西。數據庫在那裏,軌道可以清楚地與它溝通。我不確定我是如何讓它第一次運行的。我只是不知道爲什麼rails不會輸出什麼到日誌。

回答

7

好的,我明白了這一點。該應用程序在開發模式下運行良好,所以我知道一些特定於生產的東西正在搞砸它。我走進配置/環境/ production.rb並更改這些設置:

# Full error reports are disabled and caching is turned on 
config.consider_all_requests_local  = false # changed from true 
config.action_controller.perform_caching = true # changed from false 

,然後重新啓動後,乘客,軌道顯示我的錯誤W /堆棧跟蹤。原來我忘記預先編譯資產管道!

0

您是否嘗試過在開發模式下運行以查看錯誤是否會自行報告?

+0

我試過了,它首先抱怨寫訪問tmp目錄,我修好了,然後它通過罰款。我使用相同的數據庫建立了它。所以它只是在生產模式下失敗。 – Brian 2012-04-02 13:04:08

3

需要檢查的內容

1)您確定您在生產環境中運行? 檢查是否有任何條目在development.log文件中

2)設置您的應用程序,以便在堆棧跟蹤發生500錯誤時向您發送電子郵件。我使用Exception Notifier Gem,但有很多其他解決方案。

3)在控制檯中檢查您的應用程序時,確定您是在生產模式下啓動控制檯?有可能應用程序根本沒有啓動,你只是忘了設置生產參數,從而認爲應用程序運行良好時,它不會。

4)你得到一個nginx 500錯誤或Rails 500錯誤?如果是nginx,那麼很可能你的應用程序根本沒有啓動,而且很可能你的日誌文件中會出現任何rails錯誤。這些資產是靜態文件,導航到它們證明沒有其他東西比你存在。

5)你確定你正在檢查服務器上的正確文件夾嗎?聽起來很蠢,但capistrano可能會將應用程序部署到與ninx正在爲您的應用程序查找的文件夾不同的文件夾,因此請仔細檢查capistrano正在部署到的文件夾以及nginx正在查找的文件夾。

只是一個建議,我會使用獨角獸,而不是乘客。這對nginx來說太棒了。

+0

感謝您的所有建議!我肯定它在生產模式下運行(我已經在nginx config中將它指定爲乘客選項)。我相信我在Rails中遇到了500錯誤,因爲nginx錯誤日誌沒有顯示500錯誤。是的,我仔細檢查了nginx正在查看的文件夾。 – Brian 2012-04-02 13:09:50

1

我的問題是乘客的日誌文件(error.log)什麼也沒有。那麼這是一個循環日誌問題。運行

passenger-config reopen-logs 

解決了我的問題。 More