Hatena::Groupsubtech

#生存戦略 、それは

-> 12 { 12 / 20 }

Rails でアプリ内部から発行してる http をトレースする

16:17 | はてなブックマーク - Rails でアプリ内部から発行してる http をトレースする - #生存戦略 、それは

の続き。デバッグ用にセットしたら便利だったのでメモ。

Gemfile

group :test, :development do
  gem 'webmock', require: false
end

しておいて

config/environments/development.rb

if ENV['WEBMOCK_ENABLE']
  require 'webmock'

  WebMock.allow_net_connect!
  WebMock.after_request do |request_signature, response|
    res = ["=== HTTP Request ===",  "#{request_signature}", "", response.status.join(' ')]
    res << response.headers.map {|key, val| "#{key}: #{val}" }.join("\n")
    unless response.body.empty?
      res << ""
      res << response.body
    end
    res << "=" * res.first.size
    Rails.logger.debug res.join("\n")
  end
end
```

しておいて

WEBMOCK_ENABLE=1 rails s

すると、http 叩いてるところが以下みたいに出て便利。

=== HTTP Request ===
GET http://example.com/ with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}

302 Found
Location: http://www.iana.org/domains/example/
Server: BigIP
Connection: Keep-Alive
Content-Length: 0
====================
=== HTTP Request ===
GET http://www.iana.org/domains/example/ with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}

200 OK
Date: Thu, 20 Dec 2012 07:16:22 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Thu, 06 Dec 2012 19:40:14 GMT
Content-Length: 606
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=UTF-8
....
トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20121220