非常基本的ruby / sinatra / heroku /调试问题:如何看看puts和p的输出?

时间:2011-02-08 23:18:08

标签: ruby debugging heroku sinatra

我正在尝试构建一个部署在heroku上的非常简单的sinatra应用程序。

我们的应用程序没有将内容输出到Web浏览器,它通过API与另一台计算机进行通信。所以我通常的技巧就是在我使用应用程序时只是向浏览器打印一些额外的调试信息。

我在相关应用中看到的示例代码显示了多个'puts'或'p'语句,用于查看正在发生的事情......

输出在哪里,我可以在程序执行时看到输出,或之后。

并且一般来说,如果你在Heroku上托管的代码徘徊,那就是没有做你想要的,那么在代码输出消息中的各个地方最简单的方法就是“foo equals 123”,这样你就可以看到输出以确定代码中发生了什么?

p并输出不输出所以当我输入“heroku logs”时我可以看到的日志......

5 个答案:

答案 0 :(得分:10)

如果您使用雪松堆栈,请尝试在config.ru中添加一行,

$stdout.sync = true

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

原帖是在2011年2月,雪松堆栈是在5月推出的,所以这对原始问题似乎没有帮助,但是你们中的一些人可能会发现这可能有所帮助。 http://blog.heroku.com/archives/2011/5/31/celadon_cedar/

答案 1 :(得分:4)

根据http://docs.heroku.com/logging,如果您添加基本记录器(显然已默认添加到创建的所有应用中),您应该能够putsp转到您的日志2011年2月2日之后)。

对于使用Sinatra和Logger的非Heroku基本日志文件:

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

答案 2 :(得分:3)

这样可以正常工作。 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

答案 3 :(得分:0)

有关如何写入记录器的提示,请参阅此处:http://mikenaberezny.com/2007/02/24/rails-logging-tips/

给出的例子是:

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

答案 4 :(得分:0)

这是适用于我的行:

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