在Ruby中,Java CLASSPATH的等效物是什么?

6
我希望能够在任何地方运行Ruby程序。 我认为这需要使用RUBYLIB,但我无法使其正常工作。你能给出一些示例吗?

2
对于那些不熟悉Java的Ruby程序员:什么是Java中的CLASSPATH? :) - August Lilleaas
CLASSPATH是一个由分号或冒号分隔的目录列表,其中包含Java虚拟机在加载类时解析依赖项所需的*.class文件或库(包含*.class文件)。 - Peter Kofler
我理解这个问题是在问Java中存在一组令人烦恼的类路径“问题”。那么在Ruby中对应于类路径问题的是什么?是缺少gems还是其他什么?在我看来,这个问题仍然没有得到很好的回答。 - Thufir
2个回答

5
  • 您需要操作负载路径$LOAD_PATH ($:)
  • 使用-I目录来完成此操作(在类Unix系统上,目录以:分隔,在DOS / Windows系统上以;分隔)。
  • 您可以将-I开关添加到RUBYOPT中($SAFE必须为0)。
  • 或者使用RUBYLIB$SAFE也必须为0),其中包含搜索路径。
  • RUBYPATH还可更改Ruby程序的搜索路径。
  • 对于环境变量,请确保它们被正确设置或导出,以便Ruby VM看到它们。您可以在ruby.bat或ruby.sh中添加调试打印。
  • 检查您的$SAFE设置。如果您不了解它,则可能没问题。

我总是将RUBYLIBRUBYPATH设置为我的加载路径,并在解释器调用中添加-S选项。


1

有一个选项-S,它使用PATH环境变量查找脚本。

例如执行:

ruby -S some_script

将在当前操作系统PATH环境变量中查找some_script。

更新: 如果您的脚本需要其他文件,请使用以下语句:

require File.join(File.dirname(__FILE__), "name_of_required_file") 

改为:

require "name_of_required_path"

好的,前面提到的文件“some_script”现在被Ruby正确找到了(谢谢!),但是这个文件还包含一个“require 'foo'”,它没有被加载(LoadError)。它位于第一个脚本相同的目录中...有什么想法吗? - JCLL
1
为了包含所需的文件,您可以执行以下操作: require File.join(File.dirname(FILE), "name_of_required_file") - Steve Weet
注释代码应该在文件名前后删除2个下划线,应为xxFILExx,其中x是下划线。 - Steve Weet
是的,Steve的解决方案应该有效。我已经更新了帖子。 - khelll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接