Ruby命令行-r开关能否加载自定义外部文件?运行失败求排查
关于Ruby
-r 命令行开关的疑问解答 嘿,这个问题我太熟悉啦!先给你明确答案:Ruby的-r开关完全可以引入你自己创建的外部文件,不止局限于Ruby自带的标准库。你尝试加载loadee.rb没成功,大概率是操作细节出了问题,我列几个最常见的失误点,你可以对照排查:
常见失误原因
- 加载路径未包含目标文件目录:Ruby 1.9及以后的版本,默认把当前目录(
.)从$LOAD_PATH(Ruby查找要加载文件的路径列表)里移除了。如果你的loadee.rb和loaddemo.rb在同一个文件夹,但你直接用ruby -rloadee loaddemo.rb,Ruby会找不到这个文件,因为它不知道要在当前目录里找。 - 错误添加了
.rb后缀:用-r参数时不需要加文件后缀,比如你写成-rloadee.rb反而会让Ruby去找名为loadee.rb.rb的文件,自然找不到。 - 文件名大小写不匹配:在Linux、macOS这类区分大小写的系统里,如果你的实际文件名是
Loadee.rb,但你命令里写的是-rloadee,Ruby会判定这是两个不同的文件,加载失败。 - 目标文件本身有语法错误:如果
loadee.rb里存在语法问题,加载时会抛出错误,看起来像是没加载成功,但本质是加载过程中出错了。
正确的操作方式
给你几个可行的解决办法,选适合你的就行:
- 把当前目录加入加载路径:用
-I参数指定加载路径,比如两个文件在同一目录时,运行命令:
这里ruby -I. -rloadee loaddemo.rb-I.就是告诉Ruby把当前目录(.)加入到$LOAD_PATH里,这样它就能找到loadee.rb了。 - 直接指定文件的绝对路径:如果知道
loadee.rb的完整路径,可以直接写:
注意同样不需要加ruby -r/Users/yourname/projects/loadee loaddemo.rb.rb后缀。 - 在代码里用
require_relative引入:如果不想在命令行加参数,也可以在loaddemo.rb的开头加上:
这样运行require_relative 'loadee'ruby loaddemo.rb时就会自动加载同目录下的loadee.rb,更省心。
内容的提问来源于stack exchange,提问作者Caio Graco
相关产品推荐
相关产品推荐

