为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Ruby 1.9.2从LOAD_PATH中删除“。”,还有什么替代方案?

为什么Ruby 1.9.2从LOAD_PATH中删除“。”,还有什么替代方案?

芜湖不芜 2019-07-25 18:55:00
为什么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 .


查看完整回答
反对 回复 2019-07-25
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

正如其他人的回答指出的那样,这是一个安全风险,因为.在您的加载路径中引用了当前的工作目录Dir.pwd,而不是当前正在加载的文件的目录。因此,无论谁执行您的脚本,只需通过cd另一个目录即可更改。不好!

我一直在使用构建的完整路径__FILE__作为替代方案。

require File.expand_path(File.join(File.dirname(__FILE__), 'filename'))

require_relative此不同,这与Ruby 1.8.7向后兼容。


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信