项目目录的相对路径

问题描述 投票:0回答:3

在我的 Ruby 项目中,我使用了一些乱七八糟的东西,比如在几个远程机器上移动和编辑文件,我真的需要一些东西,比如我的根项目目录的相对路径。我有很多处理文件夹,在很多方法中都会用到。

现在我已经硬编码了路径,但这让我不高兴。

ruby
3个回答
139
投票

你可以用这个获取当前目录(当前文件的目录)

File.dirname(__FILE__)

然后您可以将其与根的相对路径连接

File.join(File.dirname(__FILE__), '../../') # add proper number of ..

或者您可以使用

expand_path
将相对路径转换为绝对路径。

ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', File.dirname(__FILE__))

或者您可以计算两个目录之间的相对路径。

require 'pathname'
puts Pathname.new('/').relative_path_from(Pathname.new('/some/child/dir/')).to_s
# => ../../..

33
投票
__dir__

从 Ruby 2 开始,您可以简单地使用内核函数

:__dir__
来获取当前文件的绝对目录路径。因此,举个例子,您可以在项目开始时在(config.rb、environments.rb、constants.rb 或任何您所称的名称)中设置一个常量 ROOT_DIR。

请参阅 Ruby 文档


1
投票
ROOT_DIR = File.expand_path(".")
  • 您可以从任何子脚本调用它,它将解析为项目根目录
© www.soinside.com 2019 - 2024. All rights reserved.