require の呼び出しを表示
ふと気になって、起動時になにがどういう順に require されてるのかを簡単に確認してました。
以下のようなコードをパスの通ったとこに用意しておいて、起動時のコマンドに挟み込みます。
- show_require.rb
require 'rubygems' module Kernel alias __require gem_original_require def gem_original_require(path) puts "#{path.ljust(30, " ")} from #{caller(1)[1]}" __require path end private :__require private :gem_original_require end load ARGV.shift
たとえば、AP4R の起動であれば、いつもは下記のような感じですが...、
% ruby186 script/mongrel_ap4r start -A config/queues_disk.cfg
それを次のようにします。
% ruby186 show_require.rb script/mongrel_ap4r start -A config/queues_disk.cfg
すると、require が呼ばれるごとに、なにが require されたのかと、どこから呼び出されたかが表示されます。
% ruby186 show_require.rb script/mongrel_ap4r start -A config/queues_disk.cfg rubygems from ./script/mongrel_ap4r:1 ap4r from ./script/mongrel_ap4r:2 fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' etc from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/fileutils.rb:973 fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' ap4r from ./script/mongrel_ap4r:2 rubygems from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:5 reliable-msg from /var/lib/gems/1.8/gems/ap4r-0.3.7/lib/ap4r.rb:6 reliable-msg/queue from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg.rb:9 drb from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue.rb:11 drb/drb from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb.rb:1 socket from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:54 thread from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:55 fcntl from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:56 drb/eq from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:57 drb/drb from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/eq.rb:1 drb/invokemethod from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/drb/drb.rb:1562 reliable-msg/client from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/queue.rb:12 drb from /var/lib/gems/1.8/gems/reliable-msg-1.1.0/lib/reliable-msg/client.rb:11 (snip) ** Starting AP4R Handler with config/queues_disk.cfg Loaded queues configuration from: /Users/kiwamu/work/temp/my_ap4r/config/queues_disk.cfg Using message store: memory Accepting requests at: druby://localhost:6438 (snip)
RubyGems の require でわらわら出るのもうざいので、require 'rubygems' のあとで require をひっかけるようにしています。caller のあたりはもうちょっとまともに書いたほうがいいかも... (^^;
ちなみに Rails だとこんな感じ。
あらためて見てみると、(同じものが何度も登場してるとはいえ) いろいろ require してますね...。
% ruby186 show_require.rb script/server ./script/../config/boot from ./script/server:2 rubygems from ./script/../config/boot.rb:85:in `load_rubygems' fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' etc from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/fileutils.rb:973 fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' fileutils from /var/lib/gems/1.8/lib/rubygems.rb:340:in `ensure_gem_subdirectories' initializer from ./script/../config/boot.rb:55:in `load_initializer' logger from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:1 monitor from /usr/local/pkg/ruby-1.8.6/lib/ruby/1.8/logger.rb:4 set from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:2 pathname from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:3 railties_path from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:6 rails/version from /var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:7 (snip) # 500行くらい action_controller from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' dispatcher from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' action_controller/dispatcher from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' rack/utils from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' time from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' rack/utils from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' rack/mime from /var/lib/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require' => Call with -d to detach => Ctrl-C to shutdown server