你能找到需要图书馆的地方吗?

时间:2017-09-25 09:42:56

标签: ruby

背景 - 在Rails应用程序中,我看到生产中的一个错误,文件无法从标准库中找到类;但在开发中,一切正常。据推测,我在开发组中而不是生产组中的某些宝石需要必要的库,因此符号是为开发而定义的,而不是用于生产。

有什么方法可以让Ruby告诉我为给定文件调用require的位置?

(我故意没有命名有问题的库,因为我想要了解可能需要它的建议;我想知道如何找到自己)

1 个答案:

答案 0 :(得分:3)

回答您的直接问题:修补/覆盖require方法并获取您需要的所有信息。

应用程序/配置/ environment.rb中

# set up intrumentation
module RequireSpy
  def require(*args)
    puts "requiring #{args.join(', ')} from #{caller.first}"
    super
  end
end
Object.include(RequireSpy)

# init your rails app as usual
require File.expand_path('../application', __FILE__)
Rails.application.initialize!

启动rails应用程序后,它会打印很多输出:

requiring tilt from /Users/sergio/.gem/ruby/2.4.2/gems/sinatra-1.4.8/lib/sinatra/base.rb:3:in `<top (required)>'
requiring rack/protection from /Users/sergio/.gem/ruby/2.4.2/gems/sinatra-1.4.8/lib/sinatra/base.rb:4:in `<top (required)>'
requiring thread from /Users/sergio/.gem/ruby/2.4.2/gems/sinatra-1.4.8/lib/sinatra/base.rb:7:in `<top (required)>'
requiring time from /Users/sergio/.gem/ruby/2.4.2/gems/sinatra-1.4.8/lib/sinatra/base.rb:8:in `<top (required)>'
requiring uri from /Users/sergio/.gem/ruby/2.4.2/gems/sinatra-1.4.8/lib/sinatra/base.rb:9:in `<top (required)>'

你可能想要过滤它。