从Ruby Gem,我如何获得项目的目录路径?

时间:2015-10-03 22:57:52

标签: ruby gem

假设我正在开发一个Ruby gem,它将通过添加到gemfile中安装在项目中。从我的gem,我想知道项目的根目录路径。我怎么能得到它?

2 个答案:

答案 0 :(得分:1)

如果您正在使用Rails,请使用 result.ToString("G20")

如果您不了解主要项目'是Rails ......没有必要这么做。

全局Rails.root是调用ruby脚本的命令名称。但这不一定包括一条道路。您可以尝试$0,但有很多原因会导致您无法满足您的需求,包括该计划可能已经更改了它的工作目录"。 File.expand_path $0将为您提供当前工作目录",它可能是"项目"的目录。只有从"项目目录"中调用项目时并且代码没有更改当前的工作目录。

一般来说,实际上没有"项目的内置概念"或"项目目录"在ruby中 - 你可以拥有一个根本不属于项目的ruby脚本,它只是一个文件存在于你想要的文件系统的任何地方。

我不认为这是一种通用的可靠方法,这取决于"项目"成立了,当然宝石无法确定。

但是如果你正在使用Rails Dir.pwd,因为Rails有关于它如何设置和调用的约定,并在其中实现了功能Rails.root启动进程以记录Rails'项目目录'。

答案 1 :(得分:0)

没有完美的解决方案,但是您可以创建一个基于后备解决方案的解决方案,该解决方案在大多数情况下都可以使用。如果定义了Rails,则使用Rails.root。如果定义了Bundler,我们将使用Bundler.root,但是只有在项目根目录下定义了Gemfile时,它才有效(在大多数情况下是这样)。其他回退到Dir.pwd

def project_root
  if defined?(Rails)
    return Rails.root
  end

  if defined?(Bundler)
    return Bundler.root
  end

  Dir.pwd
end