2012-04-28 14 views
6

Recentemente ho iniziato a utilizzare oink gem nella mia app di heroku perché ho notato una piccola perdita di memoria con alcune azioni del controller. Il comando di oink logs funziona bene localmente ma non riesco a capire il comando per farlo funzionare sul mio sito di produzione.Il comando di registri di oink non funziona su heroku

Ecco il comando che sto cercando:

heroku run oink /log/* 

Ed ecco la linea dal mio file production.rb:

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

Sulla mia installazione locale, Oink effettua il salvataggio dei log nel file /log/oink.log.

risposta

-1

Prova

heroku run bundle exec oink log/* 
+0

una correzione tecnica: 'log run fascio exec Oink Heroku/\ *', altrimenti il ​​simbolo viene interpretato a livello locale, che fa sì che i percorsi al vostro registro locale file da passare a heroku. Detto questo, questo comando non sembra funzionare poiché Heroku non archivia effettivamente i file di registro sul disco. –

-1

Per analizzare i log di produzione è necessario eseguire

heroku run bundle exec oink log/production.log 
1

Ecco una risposta da supporto Heroku:

"Nella maggior parte dei casi utilizzando Oink è a livello locale abbastanza buono per comprendere i problemi di utilizzo della memoria.Il filesystem di Heroku è effimero e ogni dyno ha il proprio filesystem isolato, quindi non è molto pratico scrivere e recuperare i file. gure Oink per scrivere su stdout o sul tuo logger i suoi messaggi dovrebbero apparire nei tuoi log di Heroku e potresti usare un componente aggiuntivo log drain o un archivio di log come Papertrail per ottenere una copia locale di loro. "

Quindi sembra che stiano suggerendo di utilizzarlo in fase di sviluppo. Oppure se riesci a scrivere su stdout e poi scollegalo direttamente nel formato corretto.

Non riuscivo a capirlo con un breve preavviso, così ho finito per usare la gemma heroku-api per riavviare automaticamente i server di app ogni poche ore dal cron job. Questo ha funzionato come una soluzione temporanea.

2

Ecco la risposta: https://stackoverflow.com/a/14145299/1684322

E 'importante utilizzare Hodel3000CompliantLogger invece di Rails.logger altrimenti oink fallirà file di log di parsing. Può anche essere configurato per non in config/ambienti/production.rb ma per esempio in config/inizializzatori/oink.rb

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

Questo renderà Oink scrivere in un file che può essere successivamente catturato da

registro predefinito
heroku logs -n500 --app app_name > logfile_for_oink 

Oppure utilizzare altro strumento di gestione dei registri come PaperTrail oppure impostare syslog drain (rsyslog su un'altra casella * nix).

Usa oink con --threshold = 0 per mostrare tutte le voci

Problemi correlati