2012-04-28 93 views
6

我最近開始在我的heroku應用上使用oink gem,因爲我注意到有一些控制器操作的小內存泄漏。 oink logs命令在本地正常工作,但我無法弄清楚該命令是否可以在我的生產站點上運行。oink logs命令不能在heroku上工作

這裏是我想要的命令:

heroku run oink /log/* 

在這裏,從我的production.rb文件的行:

config.middleware.use(Oink::Middleware, :logger => Rails.logger) 

在我的本地安裝,哼被存儲在/log/oink.log文件中的日誌。

回答

-1

嘗試

heroku run bundle exec oink log/* 
+0

技術性回調:'Heroku的運行捆綁高管哼日誌/ \ *',否則圖示被當地解釋,這會導致路徑到本地日誌文件傳遞給heroku。也就是說,這個命令仍然不起作用,因爲Heroku實際上並沒有將日誌文件存儲在磁盤上。 – 2012-12-21 14:43:59

-1

要分析你的生產日誌,你需要運行

heroku run bundle exec oink log/production.log 
1

這裏是Heroku的支持迴應:

「在大多數情況下使用本地哼是足以理解內存使用問題Heroku的文件系統是短暫的,每個dyno都有自己獨立的文件系統,因此寫入和讀取文件不太實際。 gure Oink寫入標準輸出或者你的rails記錄器,它的消息應該顯示在你的Heroku日誌中,你可以使用log drain或者像Papertrail這樣的日誌歸檔附加組件來獲取它們的本地副本。「

所以這聽起來像他們建議在開發中使用它。或者,如果您可以寫入標準輸出,然後用自己的日誌將它們自己排入正確的格式。

我無法在短時間內搞清楚,所以最後我使用heroku-api gem來自cron作業每隔幾小時自動重啓應用服務器。這工作作爲一個臨時修復。

2

這裏的答案:https://stackoverflow.com/a/14145299/1684322

它是用Hodel3000CompliantLogger而不是Rails.logger否則哼將失敗解析日誌文件很重要。它也可以不配置/環境/ production.rb但例如在配置配置/初始化/ oink.rb

YourApplication::Application.middleware.use(Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT), :instruments => :memory) 

這將使哼寫入默認日誌可以通過

以後捕獲的文件
heroku logs -n500 --app app_name > logfile_for_oink 

或者使用其他日誌管理工具,如PaperTrail,或設置syslog漏(另一個* nix框上的rsyslog)。

使用哼與--threshold = 0將顯示所有條目