我已經爲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上的任何輸入,非常方便。 –