我已经为Ruby中的Cacti编写了一个数据收集脚本,它在命令行中运行良好,但是 Cacti通过“env -i”运行脚本,该脚本剥离了环境以便Ruby无法找到rubygems库(“在'require'中:没有这样的文件加载 - rubygems(LoadError)“)。我该如何解决这个问题?如何在无环境的Ruby脚本中指定rubygems路径?
3
A
回答
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 "[email protected]"
#!/usr/bin/ruby
require 'rubygems'
require 'open4' # or whatever
# rest of ruby script here
这是与-x红宝石运行一个shell脚本,这将导致解释程序跳过直到它找到#!.*ruby
。这会给你一个恢复环境的机会。 -x
后面的.
是一个noop,你可以取出.
,或者用目录替换它。在运行脚本之前,Ruby将会在那里进行cd操作
我实际上猜测这不是你想要的,因为这可以通过制作两个脚本来完成,一个用于shell,一个用于Ruby。也许Ruby关心的环境变量的列表将帮助...
0
您可以在您的Ruby脚本中修改以下任何内容:$ :, $ -I或$ LOAD_PATH?这些都只是指向一个指定了红宝石查找类和其他蜉蝣在同一阵列...
>> $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", "."]
2
我不认为$LOAD_PATH
用于宝石(至少,不是唯一的)。你可能想看看,但没有在这里没有提到一对夫妇的环境变量:
ENV['GEM_HOME']
ENV['GEM_PATH']
你可以看到宝石的电流路径:
require 'rubygems'
puts Gem.path
的部分答案可能是在这里: comp.lang.ruby post
+0
FWIW,我正尝试使用来自不同用户的ruby exe和gems,并且执行'export GEM_PATH = <其他用户的GEM_PATH>'为我工作。 –
相关问题
- 1. 如何在windows_package中指定安装路径Ruby脚本
- 2. 环境中指定的maven本地回购路径在哪里?
- 3. Ruby on Rails:如何指定跑步者脚本环境
- 4. Ruby独立脚本中的RoR环境
- 5. 使用环境变量定义PM2脚本路径
- 6. 在Mac OS环境中为JAVA_HOME指定什么路径?
- 7. 环境中的Python路径
- 8. RubyGems环境(雪豹)
- 9. systemd:“环境”指令设置路径
- 10. RUBYLIB环境路径
- 11. 如何在代码名1中定位环境路径
- 12. 来源shell脚本到环境中的Ruby脚本内
- 13. Rubygems路径问题
- 14. 如何指定jsUnit-ant脚本的相对路径?
- 15. 如何指定詹金斯管道脚本pom.xml的路径
- 16. 插入脚本文件的环境路径
- 17. 指定的路径无效
- 18. 如何在ruby脚本中将ruby变量设置为shell环境变量
- 19. 的Process.Start环境路径
- 20. 路径环境变量如何工作?
- 21. 无法在Java中指定类路径
- 22. 在Openshift中设置环境路径
- 23. 在AR环境中查找路径
- 24. 如何为我的独立Ruby脚本设置Rails环境?
- 25. 在python脚本中指定python解释器路径
- 26. 在Bash脚本中指定路径变量
- 27. 警告 - 构建路径指定执行环境J2SE-1.4
- 28. ear in multimodule:构建路径指定执行环境J2SE-1.4
- 29. 在Python中,应该如何测试环境变量中指定的路径中文件的存在性?
- 30. 如何在C++中扩展包含环境变量的路径
这种方法还允许ruby代码通过'$ stdin.read'访问stdin上的任何输入,非常方便。 –