Pergunta

Eu estou tentando depurar uma chamada ActiveResource que não está funcionando.

Qual é a melhor maneira de ver a resposta HTTP para a solicitação ActiveResource está fazendo?

Foi útil?

Solução

É fácil. Basta olhar para a resposta que vem de volta. :)

Duas opções:

  • Você tem o arquivo de origem em seu computador. Edite-o. Coloque um puts response.inspect no local apropriado. Lembre-se de removê-lo.
  • Ruby tem aulas abertas. Encontrar o método certo e redefini-lo a fazer exatamente o que você quer, ou o uso aliases e chamar encadeamento para fazer isso. Há provavelmente um método que retorna a resposta -. Agarrá-lo, imprimi-lo e, em seguida, devolvê-lo

Aqui está um exemplo bobo da última opção.

# 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

Imagine a primeira definição de classe é nos arquivos de origem do Active Record. A segunda definição de classe está na sua em algum lugar do aplicativo.

$ irb -r openclasses.rb 
>> Network.new.get
I'm a request!
=> "I'm a request!"

Você pode ver que ele imprime-lo e, em seguida, retorna. Neat, hein?

(E embora meu exemplo simples não usá-lo, uma vez que não está usando Rails, veja alias_method_chain para combinar suas chamadas de alias.)

Outras dicas

Monkey corrigir a conexão para habilitar o modo Net :: HTTP de depuração. Consulte https://gist.github.com/591601 - Eu o escrevi para resolver precisamente este problema. Adicionando este essência ao seu rails aplicativo vai lhe dar Net::HTTP.enable_debug! e Net::HTTP.disable_debug! que você pode usar para imprimir informações de depuração.

modo

Net :: HTTP de depuração é inseguro e não deve ser usado em produção, mas é extremamente informativo para depuração.

Adicionar um novo arquivo para config/initializers/ chamado 'debug_connection.rb' com o seguinte conteúdo:

class ActiveResource::Connection
  # Creates new Net::HTTP instance for communication with
  # remote service and resources.
  def http
    http = Net::HTTP.new(@site.host, @site.port)
    http.use_ssl = @site.is_a?(URI::HTTPS)
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
    http.read_timeout = @timeout if @timeout
    # Here's the addition that allows you to see the output
    http.set_debug_output $stderr
    return http
  end
end

Isto irá imprimir todo o tráfego de rede para $ stderr.

Eu gosto Wireshark porque você pode iniciá-lo a ouvir no lado do cliente navegador (normalmente a sua máquina de desenvolvimento ) e, em seguida, fazer uma solicitação de página. Depois, você pode encontrar o HTTP pacotes, clique direito e "acompanhar a conversa" para ver o HTTP com cabeçalhos indo e voltando.

Isso só funciona se você também controlar o servidor:

Siga o log do servidor e pescar a URL que foi chamado:

Completed in 0.26889 (3 reqs/sec) | Rendering: 0.00036 (0%) | DB: 0.02424 (9%) | 200 OK [http://localhost/notifications/summary.xml?person_id=25738]

e, em seguida, aberto que no Firefox. Se o servidor é verdadeiramente RESTful (ie. Apátrida) você obterá a mesma resposta que Ares fez.

Ou o meu método de entrar em coisas quando eu não sei os detalhes internos exatas é literalmente apenas para jogar em um comunicado "depurador", iniciar o servidor usando "--debugger script / server" e, em seguida, passo através do código até que eu estou no lugar que eu quero, em seguida, iniciar algum inspecionar ali mesmo no IRB ..... que ajuda poder (hey Luke btw)

Talvez a melhor maneira é usar um sniffer de tráfego.

(o que seria totalmente trabalho ... exceto no meu caso o tráfego que eu quero ver é criptografada. D'oh!)

Eu usaria tcpflow aqui para ver o tráfego passando por cima do fio, em vez de remendar meu aplicativo para a saída dele.

Os cabeçalhos HTTP ao vivo firefox plug-in ( http://livehttpheaders.mozdev.org/ ) é grande por esta. Ou você pode usar uma ferramenta de site como http://www.httpviewer.net/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top