如何使用rails控制台调试并放入应用程序

时间:2014-11-03 09:22:59

标签: ruby-on-rails ruby debugging

我想通过rails控制台打开irb打印的一些线条。我已经看到很多关于如何实现它的SO问题。但是我没有得到任何内容。

下面是代码 -

def show
puts 'in show method'
@post = Feed.find_by_id params[:id]
puts @post.inspect
redirect_to root_path unless @post.present? 
end

现在我已经通过命令rails server打开了服务器。另外,在另一个终端我发出命令rails console,它打开了irb提示符。当我在浏览器中运行localhost:3000/posts/82时,它会给出正确的帖子,但控制台中没有显示任何内容。我错过了什么步骤?我想在调用特定方法时在控制台中打印一些东西。

5 个答案:

答案 0 :(得分:7)

调试的最佳方法是使用debugger命令。

如果您使用的是ruby 2.0或更高版本,则必须使用gem 'byebug',如果您使用的是1.9或更低版本,则gem ruby-debug

然后,当您在开发模式下运行服务器时,服务器将在到达debugger时停止,允许您查看对象的状态并进行修改(比仅使用puts <更好/ p>

程序将在服务器运行的同一窗口中停止。

一些基本命令:

  • c 继续执行,直到找到下一个调试器
  • n 运行下一个命令。如果是函数则执行 功能
  • s 进入下一个命令。如果是的话 函数,您将进入函数并查看变量
  • 显示表达式在每一步显示结果 你写的表达式(在调试循环时非常有用)
  • undisplay expression_number 停止显示表达
  • display 显示正在显示的所有表达
  • list 显示正在执行的源代码
  • help 显示可用的命令 help command_name 显示有关命令的详细信息

有关调试的更多信息:http://guides.rubyonrails.org/debugging_rails_applications.html

答案 1 :(得分:2)

puts 'in show method'中的line 2不会在rails console中显示输出。相反,它会在您执行rails server的同一终端中显示输出。它们可能会因为输出太多而丢失,所以试着在那里找到它。

答案 2 :(得分:1)

  1. 使用Rails.logger.debug "in show method"
  2. 在终端尾部log / development.log的第二个选项卡中,像这样

    $ cd rails_app_root
    $ tail -f log/development.log
    

    $ cd rails_app_root
    $ less +F log/development.log
    
  3. 在那里你可以找到控制台的所有输出。

答案 3 :(得分:0)

尝试使用Rails.logger

  

Rails.logger.info&#34;我想看到的一些调试信息   开发日志.------#{@ post.inspect}&#34;

它将在日志文件中打印@post值。

答案 4 :(得分:0)

我是puts调试的忠实粉丝。 e.g;

def index
  method = Kernel.instance_method(:method)
  p method.bind(request).call(:headers).source_location
  @users = User.all
end

以上代码段可帮助您找到实施该方法的位置:

Processing by UsersController#index as */*
["/Users/aaron/git/rails/actionpack/lib/action_dispatch/http/request.rb", 201]

您可以找到更多酷puts调试here