Ruby1.9.2的最新变更集不再使当前目录.
成为LOAD_PATH
的一部分。我有相当多的Rakefiles假设.
是LOAD_PATH
的一部分,所以这破坏了他们(他们报告所有基于项目路径的require语句“没有这样的文件要加载”)。这样做有什么特别的理由吗?
至于解决方法,在任何地方添加$: << "."
都可以,但看起来非常麻烦,我不想这样做。让我的Rakefiles与1.9.2+兼容的首选方法是什么?
发布于 2010-05-25 05:44:30
它被认为是一种“安全”风险。
您可以通过使用绝对路径来绕过它
File.expand_path(__FILE__) et al
或者正在做
require './filename' (ironically).
或通过使用
require_relative 'filename'
或者添加一个"include“目录
ruby -I . ...
或者相同的,使用irb;
$irb -I .
发布于 2011-03-18 14:50:09
正如其他答案指出的那样,这是一个安全风险,因为加载路径中的.
引用当前工作目录Dir.pwd
,而不是正在加载的当前文件所在的目录。因此,无论是谁在执行您的脚本,都可以通过cd
ing到另一个目录来更改这一点。不太好!
我一直在使用从__FILE__
构建的完整路径作为替代。
require File.expand_path(File.join(File.dirname(__FILE__), 'filename'))
与require_relative
不同的是,它向后兼容Ruby1.8.7。
发布于 2013-01-25 21:50:36
使用require_relative 'file_to_require'
在你的代码中加入这段代码,以使require_relative在1.8.7中工作:
unless Kernel.respond_to?(:require_relative)
module Kernel
def require_relative(path)
require File.join(File.dirname(caller.first), path.to_str)
end
end
end
https://stackoverflow.com/questions/2900370
复制相似问题