首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Ruby 1.9.2删除了“.来自LOAD_PATH,还有什么替代方案呢?

为什么Ruby 1.9.2删除了“.来自LOAD_PATH,还有什么替代方案呢?
EN

Stack Overflow用户
提问于 2010-05-25 05:12:27
回答 6查看 42K关注 0票数 154

Ruby1.9.2的最新变更集不再使当前目录.成为LOAD_PATH的一部分。我有相当多的Rakefiles假设.LOAD_PATH的一部分,所以这破坏了他们(他们报告所有基于项目路径的require语句“没有这样的文件要加载”)。这样做有什么特别的理由吗?

至于解决方法,在任何地方添加$: << "."都可以,但看起来非常麻烦,我不想这样做。让我的Rakefiles与1.9.2+兼容的首选方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-25 05:44:30

它被认为是一种“安全”风险。

您可以通过使用绝对路径来绕过它

File.expand_path(__FILE__) et al

或者正在做

require './filename' (ironically).

或通过使用

require_relative 'filename'

或者添加一个"include“目录

ruby -I . ...

或者相同的,使用irb;

$irb -I .
票数 141
EN

Stack Overflow用户

发布于 2011-03-18 14:50:09

正如其他答案指出的那样,这是一个安全风险,因为加载路径中的.引用当前工作目录Dir.pwd,而不是正在加载的当前文件所在的目录。因此,无论是谁在执行您的脚本,都可以通过cding到另一个目录来更改这一点。不太好!

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

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

require_relative不同的是,它向后兼容Ruby1.8.7。

票数 16
EN

Stack Overflow用户

发布于 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
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2900370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档