2012-04-28 14 views
6

Niedawno zacząłem używać oink gem w mojej aplikacji heroku, ponieważ zauważyłem niewielki wyciek pamięci przy niektórych działaniach kontrolera. Polecenie oink logs działa dobrze lokalnie, ale nie mogę znaleźć polecenia, aby uruchomić go w mojej witrynie produkcyjnej.Polecenie oink logs nie działa na heroku

Oto komenda Staram:

heroku run oink /log/* 

A oto wiersz z mojego pliku production.rb:

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

Na mojej instalacji lokalnej, oink przechowuje logi w pliku /log/oink.log.

Odpowiedz

-1

Spróbuj

heroku run bundle exec oink log/* 
+0

korekta techniczna: 'Heroku dziennik prowadzony bundle exec oink/\ *', w przeciwnym razie zostanie ikona interpretowane lokalnie, co powoduje, że ścieżki do lokalnego dziennika pliki do przekazania do heroku. To powiedziawszy, to polecenie nadal nie działa, ponieważ Heroku faktycznie nie przechowuje plików dziennika na dysku. –

-1

do analizy logów produkcyjnych trzeba uruchomić

heroku run bundle exec oink log/production.log 
1

Oto odpowiedź od Heroku wsparcia:

„W większości przypadków jest lokalnie za pomocą Oink wystarczająco dobry, aby zrozumieć problemy z używaniem pamięci. System plików Heroku jest efemeryczny, a każda dyna ma własny izolowany system plików, więc pisanie i pobieranie plików nie jest zbyt praktyczne. Aby napisać do stdout lub swojego loga, jego komunikaty powinny pojawić się w dziennikach Heroku. Aby uzyskać ich lokalną kopię, możesz użyć dodatku log drain lub archiwum do dziennika, takiego jak Papertrail. "

Wygląda na to, że sugerują użycie go w fazie rozwoju. Lub jeśli możesz napisać na standardowe wyjście, a następnie zalogować się, spuść je we właściwym formacie.

Nie mogłem go rozwiązać w krótkim czasie, więc wykorzystałem klejnot heroku-api, aby automatycznie restartować serwery aplikacji co kilka godzin od zadania cron. To działało jak tymczasowa poprawka.

2

Oto odpowiedź: https://stackoverflow.com/a/14145299/1684322

Ważne jest, aby używać Hodel3000CompliantLogger zamiast Rails.logger inaczej oink zawiedzie analizowania logów. Może być również skonfigurowany nie w config/środowiskach/production.rb ale na przykład w config/inicjalizatory/oink.rb

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

To sprawi Oink napisać do domyślnego pliku dziennika, które mogą być później przechwycony przez

heroku logs -n500 --app app_name > logfile_for_oink 

Lub użyj innego narzędzia do zarządzania dziennikami, takiego jak PaperTrail, lub skonfiguruj spust syslog (rsyslog na innym * polu nix).

Zastosowanie oink z --threshold = 0, aby wyświetlić wszystkie wpisy

Powiązane problemy