项目目录的相对路径

qwe*_*bek 52 ruby

在我的Ruby项目中,我使用了一些东西,例如在几个远程盒子上移动和编辑文件,我真的需要像我的根项目目录的相对路径.我有许多处理文件夹,在许多方法中使用.

现在我有硬编码的路径,但这让我不高兴.

Ser*_*sev 105

您可以使用此获取当前目录(当前文件的目录)

File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用相对路径连接到根

File.join(File.dirname(__FILE__), '../../') # add proper number of ..
Run Code Online (Sandbox Code Playgroud)

或者您可以使用expand_path将相对路径转换为绝对路径.

ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', File.dirname(__FILE__))
Run Code Online (Sandbox Code Playgroud)

或者您可以计算两个dirs之间的相对路径.

require 'pathname'; 
puts Pathname.new('/').relative_path_from(Pathname.new('/some/child/dir/')).to_s
# => ../../..
Run Code Online (Sandbox Code Playgroud)


And*_*iep 20

__dir__
Run Code Online (Sandbox Code Playgroud)

从Ruby 2开始,您可以简单地使用Kernel-function :__dir__来获取当前文件的绝对目录路径.因此,举一个例子,您可以在(config.rb,environments.rb,constants.rb或其他任何调用它)的项目开头设置一个常量ROOT_DIR.

请参阅Ruby文档