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 を実行するシェル スクリプトです。これにより、インタープリターは#!.*ruby
. これにより、環境を復元する機会が得られます。.
後はヌープです。-x
を取り出す.
か、ディレクトリに置き換えることができます。Ruby は、スクリプトを実行する前にそこに cd します。
実際には、これは実際にはあなたが望んでいるものではないと推測しています.1つはシェル用、もう1つはRuby用の2つのスクリプトを作成するだけで、何の策略もなしにこれを行うことができたからです。おそらく、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 に答える