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 您可能会发现这些文件实际上是指向具有更长、更有趣名称(例如 ruby1.8)的文件的 simlinks,因此希望能告诉您您是哪一个想用。你需要确保你运行的是同一个版本的 irb 和 ruby。如果毕竟您的加载路径仍然不同,请检查 $RUBYLIB 环境变量;这就是 load_path 的来源。【参考方案4】:我的猜测是 irb 和 ruby 以某种方式运行不同的 ruby 版本。
gem env
也可能有帮助。
【讨论】:
以上是关于ruby 需要问题(与 $LOAD_PATH 有关)的主要内容,如果未能解决你的问题,请参考以下文章