我在幾個文件中有不同類的Ruby代碼。在一個文件中,我開始執行。這個文件require
是我的其他文件。Ruby需要路徑
- 這是啓動一個ruby代碼的好方法嗎?
- 當我從符號鏈接運行代碼時,例如
DIR2/MyRubyCode
是主文件DIR1/MyRubyCode.rb
的鏈接,那麼我的要求將會失敗。我通過在require
之前將路徑DIR1
添加到$LOAD_PATH
來解決問題,但我認爲會有更好的方法來完成它。你有什麼建議嗎?
我在幾個文件中有不同類的Ruby代碼。在一個文件中,我開始執行。這個文件require
是我的其他文件。Ruby需要路徑
DIR2/MyRubyCode
是主文件DIR1/MyRubyCode.rb
的鏈接,那麼我的要求將會失敗。我通過在require
之前將路徑DIR1
添加到$LOAD_PATH
來解決問題,但我認爲會有更好的方法來完成它。你有什麼建議嗎?如果你想檢查一個Ruby文件被「require
‘版或’ruby MyRubyCode.rb
」執行,檢查__FILE__
不變。
# If the first argument to `ruby` is this file.
if $0 == __FILE__
# Execute some stuff.
end
就require/$ LOAD_PATH問題而言,您始終可以在require語句中使用相對路徑。例如:
# MyRubyCode.rb
require "#{File.dirname(__FILE__)}/foo_class"
require "#{File.dirname(__FILE__)}/bar_module"
,其中將包括在同一目錄MyRubyCode.rb
的foo_class.rb
和bar_module.rb
文件。
我知道這是一個老問題,但有一個更新的回答是,我想將它張貼:
在較新版本的Ruby的開始(我不知道的時候),你可以通過以下需要在同一個目錄下的文件:
require './foo_class'
require './bar_module'
,它會載入文件名爲在同一個目錄foo_class.rb
和bar_module.rb
。
要檢查您的文件是否爲require
d或正常運行,請檢查其他答案。
這個答案沒有解決原始問題中的用例,因爲它仍然會失敗如果ruby文件正在從符號鏈接調用或位於用戶的路徑上。 – Nathan 2013-12-02 19:03:41
如果您使用的是Ruby 1.9或更高版本,那麼您的依賴關係需要用戶require_relative。
require_relative 'foo_class'
require_relative 'bar_module'
謝謝但如果我需要File.dirname(__ FILE__),當我使用別名啓動代碼時,它也嘗試從'。'包含。我仍然有'沒有這樣的文件加載'錯誤。 – 2010-08-29 17:21:40
這是正確的。你將不得不得到符號鏈接的目標(這將代替'File.dirname()')。看看這個帖子的幾種不同的方式做到這一點: http://stackoverflow.com/questions/1237939/ruby-how-do-i-get-the-target-of-a-symlink – 2010-08-29 17:36:08
謝謝。它適用於'$ LOAD_PATH << File.dirname(Pathname.new(File.expand_path(__ FILE __))。realpath.to_s).to_s'。 – 2010-08-30 07:18:51