【问题标题】:load error when run the ruby file from a different location从不同位置运行 ruby​​ 文件时加载错误
【发布时间】:2012-09-04 14:13:44
【问题描述】:

我有以下问题:

我的 ruby​​ 项目结构:Ruby_Source\ 文件1.rb 文件2.rb 文件3.rb

在文件 1.rb 中, 需要'file2' 需要'file3'

现在,如果我从 Ruby_Source 运行 file1.rb,我不会收到任何错误。

但是,当我从不同的系统位置运行相同的程序时,例如(c:)

error 是加载错误。

有人可以帮帮我吗?

【问题讨论】:

  • 哦,你应该接受一些问题的答案。

标签: ruby


【解决方案1】:

您可能想使用require_relative:

require_relative 通过允许您加载与包含 require_relative 语句的文件相关的文件来补充内置方法 require。

查看进一步讨论:

What is the difference between require_relative and require in Ruby?

如果你运行 Ruby 1.8:

Ruby: require vs require_relative - best practice to workaround running in both Ruby <1.9.2 and >=1.9.2

【讨论】:

    【解决方案2】:

    试试这个:

    require_relative 'file2'
    

    在 Ruby 1.9.x 中。它将在file1的目录中搜索file2

    在旧版本中,您可以尝试以下操作:

    $: << File.dirname($0) 
    

    这会将当前程序的路径添加到require-search 路径中。

    【讨论】:

    • 请不要做后者。在旧版本中,您可能想要执行类似 require File.expand_path('../file2', __FILE__) 的操作,无需更改 $LOAD_PATH
    • 修改 LOAD_PATH 是一个潜在的安全风险,在库代码中真的没有必要,总有更好的选择
    • @injekt:由于'.' 已经是$LOAD_PATH 的一部分(在Ruby 1.8.x 中),因此我无法通过添加程序目录看到额外的安全风险。而且我不知道我们在谈论图书馆。
    • 没错,就是 LOAD_PATH pre 1.9 的路径,修改的原因是安全风险,为什么要撤消这些修改呢? OP 没有提供足够的信息来判断我们是否在谈论图书馆,但这并不重要。你永远不需要修改 LOAD_PATH,所以我尽量避免新手认为它没关系,在你知道之前,主流代码都存在丑陋的安全风险
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2010-11-30
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多