Как указать путь rubygems в Ruby-скрипте без среды? - PullRequest
3 голосов
/ 09 октября 2009

Я написал сценарий сбора данных для Cacti в Ruby, и он прекрасно работает из командной строки , но Cacti запускает сценарий через "env -i", который удаляет среду, поэтому Ruby не может найти библиотека rubygems ("в` require ': такой файл не загружается - rubygems (LoadError) "). Как я могу обойти это?

Ответы [ 3 ]

3 голосов
/ 10 октября 2009
#!/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

Это сценарий оболочки, который запускает ruby ​​с -x, что заставит интерпретатор пропускать строки, пока не найдет #!.*ruby. Это даст вам шанс восстановить окружающую среду. . после -x является noop, вы можете удалить . или заменить его каталогом. Перед запуском сценария Ruby перейдет на этот диск.

На самом деле я предполагаю, что это не совсем то, что вам нужно, поскольку это можно было бы сделать без хитрости, просто сделав два скрипта, один для оболочки, другой для Ruby. Возможно, список переменных среды, о которых заботится Ruby, поможет ...

2 голосов
/ 10 октября 2009

Я не думаю, что $LOAD_PATH используется для драгоценных камней (по крайней мере, не исключительно). Возможно, вы захотите взглянуть на пару переменных среды, которые здесь еще не упоминались:

ENV['GEM_HOME']
ENV['GEM_PATH']

Вы можете увидеть ваши текущие пути для драгоценных камней с:

require 'rubygems'
puts Gem.path

Частичный ответ может быть здесь: comp.lang.ru, пост

0 голосов
/ 09 октября 2009

Можете ли вы изменить в скрипте 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", "."]
...