2011-02-08 19 views
7

Estoy tratando de construir una aplicación de sinatra muy simple implementada en heroku.ruby ​​muy básico/sinatra/heroku/pregunta de depuración: cómo ver la salida de puts y p?

nuestra aplicación no está enviando material a un navegador web, se está comunicando con otra computadora a través de una API. así que mi truco habitual de imprimir un poco más de información de depuración en el navegador mientras uso la aplicación no funciona.

el código de ejemplo que he visto para aplicaciones relacionadas muestran múltiples 'pone' o declaración 'p' utilizado ot especie de ver lo que está pasando ...

¿dónde la salida vaya que puedo ver que la salida como el programa se ejecuta, o después.

y, en general, si te estás volviendo loco con el código alojado en Heroku que simplemente no está haciendo lo que deseas, ¿cuál es la forma más fácil de enviar mensajes en varios lugares como "foo es igual a 123" para que puedas ¿Ves esa salida para descubrir qué está pasando en el código?

p y pone dont de salida por lo que los registros que puedo ver cuando escribo "registros heroku", por ejemplo ...

Respuesta

4

Según http://docs.heroku.com/logging que debería ser capaz de tener puts y p sólo tiene que ir a su registro si se agrega el registrador de base (que aparentemente ha sido añadido por defecto a todos ap ps creado después del 2 de febrero de 2011).

Para no Heroku básica de registro a archivo con Sinatra y Registrador:

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

si agrego el registrador (que es para rieles, estoy usando sinatra) y luego escribo "registros heroku", falla el comando heroku: esta característica no es compatible con su versión de cliente. y el enfoque de escribir en un archivo localo no funcionará en heroku, hasta donde yo sé ... – jpwynn

+0

Logger no es "para Rails", es [parte de la biblioteca estándar] (http://ruby-doc.org/ stdlib/libdoc/logger/rdoc/index.html). Lo uso en todas mis aplicaciones de Sinatra.Sin embargo, probablemente tenga razón en que Heroku no admite archivos locales, lo que hace que esa parte de mi respuesta sea inútil para usted. La segunda parte de mi respuesta parece ser exactamente lo que necesita, sin embargo, ¿verdad? – Phrogz

+0

sí de hecho, ¡y gracias! – jpwynn

0

Consulte aquí para obtener consejos sobre cómo escribir en el registrador: http://mikenaberezny.com/2007/02/24/rails-logging-tips/

El ejemplo dada es:

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

El PO no está utilizando rieles. –

+0

correcto, probé logger.info y arroja un error en los registros heroku NameError - variable local indefinida o método 'logger 'para # jpwynn

+0

El registrador ha funcionado en Sinatra durante años. –

3

Esto funcionará bien. 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

Esta es la línea que funciona para mí:

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