为什么Ruby 1.9.2从LOAD_PATH中删除“。”,还有什么替代方案?Ruby 1.9.2的最新变更集不再使当前目录.成为您的目录LOAD_PATH。我有一些非常重要的Rakefiles假设它.是其中的一部分LOAD_PATH,所以这打破了它们(他们报告“没有这样的文件加载”所有基于项目路径的require语句)。这样做有什么特别的理由吗?至于一个修复,添加$: << "."到处都有效,但看起来非常hacky,我不想这样做。使Rakefiles 1.9.2+兼容的首选方法是什么?
3 回答
达令说
TA贡献1821条经验 获得超6个赞
这被视为“安全”风险。
您可以使用绝对路径绕过它
File.expand_path(__FILE__) et al
或做
require './filename' (ironically).
或者通过使用
require_relative 'filename'
或添加“包含”目录
ruby -I . ...
或者相同,使用irb;
$irb -I .
红糖糍粑
TA贡献1815条经验 获得超6个赞
正如其他人的回答指出的那样,这是一个安全风险,因为.
在您的加载路径中引用了当前的工作目录Dir.pwd
,而不是当前正在加载的文件的目录。因此,无论谁执行您的脚本,只需通过cd
另一个目录即可更改。不好!
我一直在使用构建的完整路径__FILE__
作为替代方案。
require File.expand_path(File.join(File.dirname(__FILE__), 'filename'))
与require_relative
此不同,这与Ruby 1.8.7向后兼容。
- 3 回答
- 0 关注
- 666 浏览
添加回答
举报
0/150
提交
取消