ruby 需要问题(与 $LOAD_PATH 有关)

Posted

技术标签:

【中文标题】ruby 需要问题(与 $LOAD_PATH 有关)【英文标题】:ruby require problem (something to do with $LOAD_PATH) 【发布时间】:2011-09-14 17:25:08 【问题描述】:

我正在尝试使用我刚刚安装的 gem(通过 sudo gem install excelsior)像这样

需要“红宝石”

需要'excelsior'

...

这在 irb 中运行良好,但是当我将完全相同的代码粘贴到 .rb 文件中并尝试使用 ruby​​ 运行它时,我得到 <internal:lib/rubygems/custom_require>:29:in require': no such file to load -- excelsior (LoadError)

我想这与 irb 中的加载路径显然与 ruby​​ 完全不同有关(我在 mac 上,不记得我是如何安装我正在使用的 ruby​​ 版本的)。

那么如何配置 ruby​​ 使其具有与 irb 相同的加载路径?

一个额外的信息:一些宝石有效,但不是全部:S

【问题讨论】:

ruby、gem 和 irb 都是同一个安装的一部分吗?使用which 命令检查。此外,您可以通过 bash 或 ruby​​ 脚本修改 $LOAD_PATH 非常相似的问题:***.com/questions/6181247/… 【参考方案1】:

您可以轻松检查 irb 加载路径中的内容:

irb(main):001:0> $LOAD_PATH

然后您可以通过使用-I 选项(可以多次使用)调用它来识别丢失的目录并将它们包含在ruby 中:

ruby -I missing_dir_1 -I missing_dir_2 your_script.rb

编辑: 尽管我还没有测试过,但有一种可能性是,通过使用sudo 安装 Excelsior gem,您已经将它放在一个没有sudo 的 ruby​​ 无法访问的目录中。试试sudo ruby your_script.rb

【讨论】:

有没有一种方法可以添加到加载路径而无需在调用 ruby​​ 命令时全部指定?说一个配置文件什么的? @Nat $LOAD_PATH << "directory_path" require excelsior 之前应该足够了。 这不起作用,这似乎很奇怪。我为 p $LOAD_PATH 在 IRB 中 require 'excelsior' 行之前的列表输出中的每个项目添加了 $LOAD_PATH << "directory_path" 语句,但它仍然因相同的错误而窒息。 也用 sudo 运行 ruby​​ 似乎没有任何区别:(【参考方案2】:

要查看这两个可执行文件是否是 ruby​​ 的不同版本(有些人怀疑),请它这样做

puts RUBY_VERSION

【讨论】:

啊,是的,irb 是 1.8.7,而 ruby​​ 是 1.9.2 ...所以我想我可以找出 1.8.7 的 ruby​​ 工具在哪里并使用它,尽管我会如何两者让 irb 使用 1.9.2,并让 1.9.2 与我所有的宝石一起工作??? 我找到了 1.8.7 ruby​​ 工具,它可以“需要 excelsior”,但它在其他一些不是不可修复但也不方便的行上窒息:( 知道我将如何制作宝石可以与较新的红宝石一起使用吗? 我们可能与多次安装有关的问题。最后,我通过安装 rvm 并设置了一个新的 ruby​​ & gems 环境来修复它。【参考方案3】:

马罗说了什么。

你也应该试试:

ruby -e 'puts $LOAD_PATH' 

...看看与 irb 有什么不同。

编辑:您是否有可能安装了两个不同版本的 ruby​​?试试:

type -a ruby
type -a irb

查看它们是否链接到另一个可执行文件,例如“irb1.8”。

【讨论】:

我可能有两个版本的 ruby​​,尽管 irb 和 ruby​​ 都在 /usr/bin 和 /usr/local/bin 中。加载路径完全不同。有办法改变吗? 听起来好像您确实有两个版本的 ruby​​:一个在 /usr/bin 中,一个在 /usr/local/bin 中。如果您 ls -l /usr/local/bin/ruby /usr/bin/ruby 您可能会发现这些文件实际上是指向具有更长、更有趣名称(例如 ruby​​1.8)的文件的 simlinks,因此希望能告诉您您是哪一个想用。你需要确保你运行的是同一个版本的 irb 和 ruby​​。如果毕竟您的加载路径仍然不同,请检查 $RUBYLIB 环境变量;这就是 load_path 的来源。【参考方案4】:

我的猜测是 irb 和 ruby​​ 以某种方式运行不同的 ruby​​ 版本。 gem env 也可能有帮助。

【讨论】:

以上是关于ruby 需要问题(与 $LOAD_PATH 有关)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Ruby 1.9.2 删除“。”来自 LOAD_PATH,还有啥替代方法?

Ruby:无法加载此类文件 - LoadError

Ruby的require相关知识

gulp-sass 解决 load_path 支持?

dl/win32 加载错误

(Ruby,Rails)模块和库中SELF的上下文......?