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

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

Ruby 1.9.2的最新变更集不再使当前目录.成为您的目录LOAD_PATH。我有一些非常重要的Rakefiles假设它.是其中的一部分LOAD_PATH,所以这打破了它们(他们报告“没有这样的文件加载”所有基于项目路径的require语句)。这样做有什么特别的理由吗?

至于一个修复,添加$: << "."到处都有效,但看起来非常hacky,我不想这样做。使Rakefiles 1.9.2+兼容的首选方法是什么?


芜湖不芜
浏览 639回答 3
3回答

达令说

这被视为“安全”风险。您可以使用绝对路径绕过它File.expand_path(__FILE__)&nbsp;et&nbsp;al或做require&nbsp;'./filename'&nbsp;(ironically).或者通过使用require_relative&nbsp;'filename'或添加“包含”目录ruby&nbsp;-I&nbsp;.&nbsp;...或者相同,使用irb;$irb&nbsp;-I&nbsp;.

红糖糍粑

正如其他人的回答指出的那样,这是一个安全风险,因为.在您的加载路径中引用了当前的工作目录Dir.pwd,而不是当前正在加载的文件的目录。因此,无论谁执行您的脚本,只需通过cd另一个目录即可更改。不好!我一直在使用构建的完整路径__FILE__作为替代方案。require&nbsp;File.expand_path(File.join(File.dirname(__FILE__),&nbsp;'filename'))与require_relative此不同,这与Ruby 1.8.7向后兼容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby