我在几个文件中有不同类的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