项目目录的相对path

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

现在我有硬编码的path,但这让我不高兴。

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

File.dirname(__FILE__) 

然后你可以用相对pathjoin到根目录

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

或者,您可以使用expand_path将相对path转换为绝对path。

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

或者你可以计算两个dir之间的相对path。

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

从Ruby 2开始,您可以简单地使用Kernel-function :__dir__来获取当前文件的绝对目录path。 因此,举个例子,你可以在项目开始的时候在(config.rb,environments.rb,constants.rb或者其他你所说的任何东西)中设置一个常量ROOT_DIR。

请参阅Ruby文档