0

私は Rubygem に興味を持ち、それがどのように機能するかを調べ始めました。1.9 以降、Rubygemrequireが THEになっていることがわかりましたrequire

以下のコードで:

require 'debugger'
debugger
require 'thor'

nlとを始めましsたが、行き詰まりました:

  # specification.rb:263
  def self._all # :nodoc:
    unless defined?(@@all) && @@all then
      specs = {}

      self.dirs.each { |dir|
        Dir[File.join(dir, "*.gemspec")].each { |path|
          spec = Gem::Specification.load path.untaint
          # #load returns nil if the spec is bad, so we just ignore
          # it at this stage
          specs[spec.full_name] ||= spec if spec
        }
      }

      @@all = specs.values

      _resort!
    end
    @@all
  end

上記の方法に踏み込む前に、@@allすでに準備されているようです。次に、どこ@@all =にでもブレークポイントを設定しましたが、どのブレークポイントにも到達しません。

私は何が欠けていますか???


編集:

私の質問をもう一度見てください。見えるrequire 'debugger'?私はばかのように感じます。

質問は「どうすればデバッグできますかrequireですか?


閉まっている:

Plzはこの素晴らしい答えを見てください: https://stackoverflow.com/a/16069229/342366

4

1 に答える 1

0

このあいさつの答えに再び感謝します:https://stackoverflow.com/a/16069229/342366、私は自分で少しデバッグしました。

この質問に対するグーグル(そしてデバッグが面倒)のために、「Rubygemにはすべてのgemが必要ですか?」 への回答を投稿することにしました。

主な手順は次のとおりです。

  1. 「Ruby193\lib\ruby\gems\1.9.1\specifications」にある「.gemspec」をすべて読み込む

    Dir[File.join(dir, "*.gemspec")].each { |path|
      spec = Gem::Specification.load path.untaint
      # #load returns nil if the spec is bad, so we just ignore
      # it at this stage
      specs[spec.full_name] ||= spec if spec
    }
    
  2. gem をバージョンの降順で並べ替える

    @@all.sort! { |a, b|
      names = a.name <=> b.name
      next names if names.nonzero?
      b.version <=> a.version
    }
    
  3. 最初の宝石を手に入れた (より高いバージョン)

    self.find { |spec|
      spec.contains_requirable_file? path
    }
    
  4. gem とすべての依存関係をアクティブにします~ みんな幸せです。

于 2013-04-22T13:02:53.940 に答える