Ruby 如何找到宝石的位置?
我正在开发一个库,提供对gem元数据的访问,包括它在文件系统中的位置。其想法是让gem作者将其设置为来自任何脚本的相对路径:Ruby 如何找到宝石的位置?,ruby,path,gem,Ruby,Path,Gem,我正在开发一个库,提供对gem元数据的访问,包括它在文件系统中的位置。其想法是让gem作者将其设置为来自任何脚本的相对路径: # $root/example.gemspec Example::Gem.root '.' # => $root/ # $root/lib/example/gem.rb Example::Gem.root '../..' # => $root/ 然后,将使用当前脚本的路径来计算绝对路径。我目前的执行情况如下: def root(rela
# $root/example.gemspec
Example::Gem.root '.' # => $root/
# $root/lib/example/gem.rb
Example::Gem.root '../..' # => $root/
然后,将使用当前脚本的路径来计算绝对路径。我目前的执行情况如下:
def root(relative_to = nil, file = __FILE__)
unless relative_to.nil?
@root = File.expand_path relative_to, File.dirname(file)
end
@root
end
我原以为\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
会返回调用方脚本的路径,但这种假设是错误
它在图书馆内部工作,但当我试图将它与我的另一个珍宝集成时,它崩溃了;生成的路径始终相对于支持库本身
我如何在每次调用时都不必传递当前的\uuuuuuuuuuuuuuuuuuuuuuuuuuuu文件
就可以实现这一点?否则,就没有多少价值可言;编写根(“../…”,_文件_)
几乎与编写实际方法来执行相同的操作相同
如果可以在不指定任何内容的情况下找出路径,那就更好了,但我想不出任何东西。Rails是如何做到的
顺便说一句,我知道,但它总是返回相对于安装目录的路径,即使gem实际上不在那里,这使得它在开发环境中毫无用处。您始终可以使用提供的回溯功能:
caller.first
它生成文件和行的混合体,但通常由:
分隔。无论出于何种原因,我都会小心地允许文件名或路径包含冒号,忽略行信息,但保留其余部分。换句话说,不要拆分,而是拆分:
caller.first.sub(/:\d+:in .*$/, '')
您始终可以使用提供的回溯功能:
caller.first
它生成文件和行的混合体,但通常由:
分隔。无论出于何种原因,我都会小心地允许文件名或路径包含冒号,忽略行信息,但保留其余部分。换句话说,不要拆分,而是拆分:
caller.first.sub(/:\d+:in .*$/, '')
一个开始就是处理调用方。首先,根据需要处理字符串。我不确定是否有更好的版本。@tadman,该方法实现的输出是否已定义?不管怎样,我会查出来的。@tadman,你的解决方案行得通!我不确定是否有任何陷阱,但从我读到的,它正是我需要的。添加一个正确的答案,以便我可以接受它!一个开始就是处理调用方。首先,根据需要处理字符串。我不确定是否有更好的版本。@tadman,该方法实现的输出是否已定义?不管怎样,我会查出来的。@tadman,你的解决方案行得通!我不确定是否有任何陷阱,但从我读到的,它正是我需要的。添加一个正确的答案,以便我可以接受它!谢谢你提醒我。我使用了
/:\d+(:in.*)\z/
,因为文档说明调用者可以在文件:行
或文件:行:in方法
格式中返回字符串。谢谢提醒。我使用了/:\d+(:in.*)\z/
,因为文档说明调用者可以在文件:line
或文件:line:in方法
格式中返回字符串。