开发者

very basic ruby/sinatra/heroku/debugging question: how to see output of puts and p?

I'm trying to build a very simple sinatra app deployed on heroku.

our app is not outputting stuff to a web browser, it's communicating with another computer via an API. so my usual trick of just printing a little extra debugging info to the browser while I'm using the app doesnt work.

the sample code I've seen for related apps show multipl开发者_运维技巧e 'puts' or 'p' statement used ot sort of see what's going on...

where does the output go that I can see that output as the program executes, or afterwards.

and in general, if you're flailing around with code hosted at Heroku that's just not doing what you want, what IS the easiest way to at various places in the code output messages like "foo equals 123" so you can see that output to figure out what's happening in the code?

p and puts dont output so the logs I can see when I type "heroku logs" for example...


If you use a cedar stack, try to put a line bellow in config.ru,

$stdout.sync = true

http://devcenter.heroku.com/articles/ruby#logging

Original post was in February 2011, and Cedar stack was introduced in May, so this doesn't seem to be help for original question, but some of you may find this could be help. http://blog.heroku.com/archives/2011/5/31/celadon_cedar/


According to http://docs.heroku.com/logging you should be able to have puts and p just go to your log if you add the basic logger (which has apparently been added by default to all apps created after February 2nd, 2011).

For non-Heroku basic log-to-file with Sinatra and 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


This will work fine. 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


See here for tips on how to write to the Logger: http://mikenaberezny.com/2007/02/24/rails-logging-tips/

The example given is:

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


This is the line that works for me:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜