我在 Ruby 中为 Cacti 编写了一个数据收集脚本,它在命令行中运行良好,但Cacti 通过“env -i”运行脚本,它剥离了环境,因此 Ruby 找不到 rubygems 库(“在 `require' : 没有要加载的文件——rubygems (LoadError)")。我该如何解决这个问题?
问问题
4731 次
3 回答
3
#!/bin/sh
#export LOAD_PATH=whatever
#export RUBYLIB=whatever
#export RUBYOPT=whatever
#export RUBYPATH=whatever
#export RUBYSHELL=whatever
#export PATH=$PATH:whatever
exec ruby -x. $0 "$@"
#!/usr/bin/ruby
require 'rubygems'
require 'open4' # or whatever
# rest of ruby script here
这是一个使用 -x 运行 ruby 的 shell 脚本,这将导致解释器跳过行,直到找到#!.*ruby
. 这将使您有机会恢复环境。.
after是 noop ,-x
你可以取出.
,或者用目录替换它。Ruby 会在运行脚本之前 cd 到那里。
我实际上猜测这并不是您真正想要的,因为只需制作两个脚本,一个用于 shell,一个用于 Ruby,就可以在没有任何技巧的情况下完成此操作。也许Ruby关心的环境变量列表会有所帮助......
于 2009-10-09T20:07:25.123 回答
2
我不认为$LOAD_PATH
用于宝石(至少,不完全是)。您可能想查看这里尚未提及的几个环境变量:
ENV['GEM_HOME']
ENV['GEM_PATH']
您可以通过以下方式查看当前的宝石路径:
require 'rubygems'
puts Gem.path
部分答案可能在这里:comp.lang.ruby post
于 2009-10-10T19:05:16.583 回答
0
您能否在 Ruby 脚本中修改以下任何内容:$:、$-I 或 $LOAD_PATH?这些都只是指向同一个数组,该数组指定 Ruby 在哪里寻找类和其他蜉蝣……
>> $LOAD_PATH
=> ["/usr/local/lib/ruby/site_ruby/1.8", "/usr/local/lib/ruby/site_ruby/1.8/i686-darwin9.5.0", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/1.8", "/usr/local/lib/ruby/1.8/i686-darwin9.5.0", "."]
于 2009-10-09T19:54:32.523 回答