背景 - 在Rails应用程序中,我看到生产中的一个错误,文件无法从标准库中找到类;但在开发中,一切正常。据推测,我在开发组中而不是生产组中的某些宝石需要必要的库,因此符号是为开发而定义的,而不是用于生产。
有什么方法可以让Ruby告诉我为给定文件调用require
的位置?
(我故意没有命名有问题的库,因为我不想要了解可能需要它的建议;我想知道如何找到自己)
答案 0 :(得分:3)
回答您的直接问题:修补/覆盖require
方法并获取您需要的所有信息。
# 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)>'
你可能想要过滤它。