代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

在RubyonRails上,我们如何在控制器内部打印调试信息?

  •  36
  • nonopolarity  · 技术社区  · 14 年前

    在php、cgi或ror视图中,我们可以轻松地打印出调试信息。在控制器里怎么样,我们怎么能说, print "hello world" (到网页输出)并返回继续查看,还是停止控制器?

    5 回复  |  直到 7 年前
        1
  •  88
  •   Papipo    14 年前

    在控制器中,您可以:

    render :text => @some_object.inspect
    

    但您的视图不会被呈现。

    你也可以:

    Rails.logger.debug("My object: #{@some_object.inspect}")
    

    并在log/development.log上运行tail以查看输出。

    在这种情况下,建议的方法是:

    <%= debug(@some_object) %>
    
        2
  •  5
  •   Nikita Rybak    14 年前

    不知道 print 但是 puts 我从来没有失败过。你的 hello world 将在控制台和日志中,正常流将继续。
    我对你的理解正确吗?

        3
  •  4
  •   Flavius Stef    14 年前

    您可以在视图中进行调试: <%= debug @post %> . 更多信息: http://guides.rubyonrails.org/debugging_rails_applications.html

        4
  •  2
  •   mpalencia    7 年前

    您可以使用带有inspect的abort

    abort params[:whatevs].inspect
    

    abort @my_variable.inspect
    

    对于 杰森 格式

    render json: JSON.pretty_generate(JSON.parse(@my_variable.to_json))
    
        5
  •  1
  •   nonopolarity    12 年前

    事实上,尼基塔的建议也不错。但通常很难看到终端中的数据,因为屏幕缓冲区的大小是有限的,并且它充满了以前呈现页面时的数据。

    但是,比如在Mac上,只要确保屏幕缓冲区足够大,并且也可以在 rails server 终止密钥 命令 K 首先清除整个屏幕缓冲区,然后使用浏览器获取网页,现在使用 命令 f 搜索你打印出来的字符串,它也能很好地工作。实际上如果 命令 K 用于先清除整个屏幕缓冲区,然后打印输出应始终适合屏幕缓冲区。