2012-02-23 82 views
40

在我的Ruby項目中,我使用了一些亂七八糟的東西,像在幾個遠程盒子上移動和編輯文件,我真的需要類似於我的根項目目錄的相對路徑。我有許多處理文件夾,用於許多方法。您的項目目錄的相對路徑

現在我有硬編碼的路徑,但這讓我不快。

回答

73

你可以得到當前目錄(當前文件的目錄)這

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 
# => ../../.. 
+0

感謝SERG,讓我refrase – qwebek 2012-02-23 16:49:00

+0

那麼,究竟是什麼問題了嗎? – 2012-02-23 16:50:14

+1

我所面臨的某些問題是以下 - FileUtils.chdir( 「\\\\ someRemoteIp \\ somedir」) FileUtils.cp(文件名, 「local_box_drive \\文件夾」) 然後我需要提取從一些數據 my_method(local_file_in_root_project_folder) 如果我將運行在一些這樣的代碼:這是項目 我必須做 FileUtils.chdir(「\\ \\文件夾\\ my_project_folder E」)的根文件其他盒子,它會失敗,我需要 FileUtils.chdir(「E:\\ folder \\ folder \\ my_project_folder」) 替換爲一些相關表達式,這會將我帶到我的項目根文件夾 – qwebek 2012-02-23 16:58:03

12
__dir__ 

由於紅寶石2,你可以簡單地使用內核函數:__dir__來獲取當前文件的絕對目錄路徑。因此,舉個例子,您可以在項目開始時在(config.rb,environments.rb,constants.rb或其他任何您稱之爲的項目)中設置一個常量ROOT_DIR。

Ruby Documentation