2011-02-08 9 views
7

Sto provando a creare un'app sinatra molto semplice distribuita su heroku.domanda base di ruby ​​/ sinatra/heroku/debug: come vedere l'output di puts e p?

la nostra app non sta inviando materiale ad un browser web, ma sta comunicando con un altro computer tramite un'API. quindi il mio solito trucco di stampare solo alcune informazioni extra di debug sul browser mentre sto usando l'app non funziona.

il codice di esempio che ho visto per le applicazioni correlate mostrano multipli 'puts' o dichiarazione 'p' utilizzato ot sorta di vedere cosa sta succedendo ...

da dove viene l'uscita va che posso vedere che l'uscita come il programma viene eseguito, o in seguito.

e, in generale, se si agita con il codice ospitato su Heroku che semplicemente non sta facendo ciò che si desidera, qual è il modo più semplice per raggiungere vari punti nei messaggi di output del codice come "pippo equivale a 123" in modo da poter vedi quell'output per capire cosa sta succedendo nel codice?

p e mette dont uscita in modo i log posso vedere quando si digita "log Heroku" per esempio ...

risposta

4

Secondo http://docs.heroku.com/logging si dovrebbe essere in grado di avere puts e p basta andare al vostro registro se si aggiunge il logger di base (che è stato a quanto pare aggiunto di default a tutti ap ps creato dopo il 2 febbraio 2011).

Per i non-Heroku base log-to-file con Sinatra e Logger:

require 'logger' 
Dir.mkdir('logs') unless File.exist?('logs') 
$log = Logger.new('logs/output.log','weekly') 

configure :production do 
    $log.level = Logger::WARN 
end 
configure :development do 
    $log.level = Logger::DEBUG 
end 

get "/" do 
    $log.debug "Hello, World!" 
end 
+0

se aggiungo il logger (che è per i binari, sto usando sinatra) e poi digito "heroku logs" il comando heroku ha esito negativo: questa funzione non è supportata dalla versione del client. e l'approccio di scrivere su un file localo non funzionerà su heroku per quanto ne so ... – jpwynn

+0

Il logger non è "per Rails", è [parte della Standard Library] (http://ruby-doc.org/ stdlib/libdoc/registratore/rdoc/index.html). Lo uso in tutte le mie app di Sinatra.Tuttavia, probabilmente hai ragione sul fatto che Heroku non supporta i file locali, il che rende inutile quella parte della mia risposta. La seconda parte della mia risposta sembra essere esattamente ciò di cui hai bisogno, tuttavia, giusto? – Phrogz

+0

sì, certo, e grazie! – jpwynn

0

Vedi qui per avere consigli su come scrivere al logger: http://mikenaberezny.com/2007/02/24/rails-logging-tips/

L'esempio data è:

class HomeController < ActionController::Base 
    def index 
    logger.info 'informational message' 
    end 
end 
+0

Il PO non utilizza Rails. –

+0

corretto, ho provato logger.info e genera un errore nei registri heroku NameError - variabile locale non definita o metodo 'logger 'per # jpwynn

+0

Il logger ha lavorato a Sinatra da anni. –

3

Questo funzionerà correttamente. test_logging.rb

require 'sinatra' 
require 'logger' 

enable :logging 

before do 
    logger.level = Logger::DEBUG 
end 

get '/' do 
    logger.debug "Handling 'hello world' request." 
    logger.info "Hello world." 

    return "<h1>Hello World</h1>" 
end 
0

Questa è la linea che funziona per me:

# On config.ru, before run: 
enable :logging, :dump_errors, :raise_errors