如何查看对ActiveResource请求的HTTP响应?

Luk*_*ncl 7 ruby ruby-on-rails activeresource

我正在尝试调试无效的ActiveResource调用.

查看ActiveResource请求的HTTP响应的最佳方法是什么?

Kai*_*ren 14

Monkey修补连接以启用Net :: HTTP调试模式.请参阅https://gist.github.com/591601 - 我写它来解决这个问题.添加此要点到你的Rails应用程序将给您Net::HTTP.enable_debug!Net::HTTP.disable_debug!您可以使用打印调试信息.

Net :: HTTP调试模式不安全,不应在生产中使用,但对于调试非常有用.


Ian*_*ell 3

这很容易。只需查看返回的响应即可。:)

两种选择:

  • 您的计算机上有源文件。编辑它。放在puts response.inspect适当的地方。记得将其删除。
  • Ruby 有公开课。找到正确的方法并重新定义它以完全执行您想要的操作,或者使用别名和调用链来执行此操作。可能有一个方法可以返回响应——抓取它,打印它,然后返回它。

这是后一个选项的一个愚蠢的例子。

# Somewhere buried in ActiveResource:
class Network
  def get
    return get_request
  end

  def get_request
    "I'm a request!"
  end
end

# Somewhere in your source files:
class Network
  def print_request
    request = old_get_request
    puts request
    request
  end
  alias :old_get_request :get_request
  alias :get_request :print_request
end
Run Code Online (Sandbox Code Playgroud)

想象一下第一个类定义位于 ActiveRecord 源文件中。第二个类定义位于您的应用程序中的某个位置。

$ irb -r openclasses.rb 
>> Network.new.get
I'm a request!
=> "I'm a request!"
Run Code Online (Sandbox Code Playgroud)

您可以看到它打印它然后返回它。整洁吧?

(虽然我的简单示例没有使用它,因为它没有使用 Rails,但请检查alias_method_chain以合并您的别名调用。)