在我的Ruby項目中,我使用了一些亂七八糟的東西,像在幾個遠程盒子上移動和編輯文件,我真的需要類似於我的根項目目錄的相對路徑。我有許多處理文件夾,用於許多方法。您的項目目錄的相對路徑
現在我有硬編碼的路徑,但這讓我不快。
在我的Ruby項目中,我使用了一些亂七八糟的東西,像在幾個遠程盒子上移動和編輯文件,我真的需要類似於我的根項目目錄的相對路徑。我有許多處理文件夾,用於許多方法。您的項目目錄的相對路徑
現在我有硬編碼的路徑,但這讓我不快。
你可以得到當前目錄(當前文件的目錄)這
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
# => ../../..
__dir__
由於紅寶石2,你可以簡單地使用內核函數:__dir__
來獲取當前文件的絕對目錄路徑。因此,舉個例子,您可以在項目開始時在(config.rb,environments.rb,constants.rb或其他任何您稱之爲的項目)中設置一個常量ROOT_DIR。
感謝SERG,讓我refrase – qwebek 2012-02-23 16:49:00
那麼,究竟是什麼問題了嗎? – 2012-02-23 16:50:14
我所面臨的某些問題是以下 - 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