2012-06-08 124 views
0

我想要求兩個寶石:json和rinku。紅寶石需要加載錯誤

我正在託管的Linux機器,並且沒有根/ sudo訪問,並結束了與被安裝在我的主目錄中的寶石:

-jailshell-3.2$ gem which json 
/home/cygnetrc/ruby/gems/gems/json-1.7.3/lib/json.rb 
-jailshell-3.2$ gem which rinku 
/home/cygnetrc/ruby/gems/gems/rinku-1.5.1/lib/rinku.rb 

Ruby的版本是:

-jailshell-3.2$ ruby --version 
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux] 

RubyGems的環境是:

- RUBYGEMS VERSION: 1.8.11 
    - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux] 
    - INSTALLATION DIRECTORY: /home/cygnetrc/ruby/gems 
    - RUBY EXECUTABLE: /usr/bin/ruby 
    - EXECUTABLE DIRECTORY: /home/cygnetrc/ruby/gems/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-linux 
    - GEM PATHS: 
    - /home/cygnetrc/ruby/gems 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - "gempath" => [] 
    - "gem" => "--remote --gen-rdoc --run-tests" 
    - "gemhome" => "/home/cygnetrc/ruby/gems" 
    - "rdoc" => "--inline-source --line-numbers" 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 


-jailshell-3.2$ ruby -e 'puts $:' 
/usr/lib/ruby/site_ruby/1.8 
/usr/lib/ruby/site_ruby/1.8/x86_64-linux 
/usr/lib/ruby/site_ruby 
/usr/lib/ruby/vendor_ruby/1.8 
/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux 
/usr/lib/ruby/vendor_ruby 
/usr/lib/ruby/1.8 
/usr/lib/ruby/1.8/x86_64-linux 
. 

我嘗試使用包括寶石:

-jailshell-3.2$ head gettweets.rb 
#!/usr/bin/ruby 

require 'rubygems' 
require 'json' 
require 'net/https' 
require 'uri' 
require 'rinku' 

但是結了:

-jailshell-3.2$ ./gettweets.rb 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- json (LoadError) 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
     from ./gettweets.rb:7 

我看了看周圍廣泛,發現許多關於像RUBYOPTS各種不同的路徑變量的信息,但似乎沒有爲我工作。

使問題更加複雜化,我將從cron作業調用腳本,因此無論我使用哪種解決方案,都不能像我的.profile一樣依賴於更改我的主目錄中的任何內容。

我拉我的頭髮 - 任何人都可以幫忙嗎?


UPDATE:

感謝您的反饋!遵循你的一些建議,我閱讀了GEM_PATH,如果我將其設置並將其作爲shell環境變量導出,它將起作用。但是,因爲我想從cron運行腳本,所以我需要能夠從腳本本身進行設置。我試圖做到這一點,但它似乎並沒有工作。還有什麼想法?

-jailshell-3.2$ ruby -I ~/ruby/gems ./gettweets.rb 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- json (LoadError) 
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
     from ./gettweets.rb:4 
-jailshell-3.2$ head -20 ./gettweets.rb 
#!/usr/bin/ruby 

require 'rubygems' 
require 'json' 
require 'net/https' 
require 'uri' 
require 'rinku' 
require 'optparse' 

OptionParser.new do |o| 
    o.on('-d', "Turn on debugging messages") { |b| $debug = b } 
    o.on('-h', "Print this help screen") { puts o; exit } 
    o.parse! 
end 

puts "[*] Starting..." if $debug 

# Setenv to catch json gem 
ENV['GEM_PATH'] = '~/ruby/gems' 
puts "ENV " + ENV['GEM_PATH'] if $debug 
-jailshell-3.2$ export GEM_PATH=~/ruby/gems 
-jailshell-3.2$ ruby ./gettweets.rb -d 
[*] Starting... 
ENV ~/ruby/gems 
[*] Filepath = /home/cygnetrc/www/drupal/tweets.html 
The queens of the women's single sculls - a look back at the Olympic history: http://t.co/d0YmNr40 #rowing #wr #London2012 #Olympics<br /> 
<em>Fri Jun 08 16:05:38</em><br /> 
1 week until #WRCMunich! NZL's Storm Uru will be racing the LM2x with @petertaylorNZ. Here, Uru talks about teamwork: http://t.co/NvjRgtwW<br /> 
<em>Fri Jun 08 14:38:02</em><br /> 
The 2012 @Paralympic Games Qualification Process is complete: http://t.co/D6DRG0bO #rowing #adaptive #ParalympiC#London2012 #wr<br /> 
<em>Fri Jun 08 13:23:14</em><br /> 
true 
[*] Finished 
-jailshell-3.2$ 
+1

你看過http://stackoverflow.com/questions/901085/setting-ruby-load-path-externally – topek

+1

你有'gempath'在'.g​​emrc'中定義了嗎?嘗試刪除它,看看它是否有幫助。 – Casper

+1

幫你一個忙,並使用rvm。 – three

回答

0

我遇到了類似的問題,運行Ruby通過Apache mod_cgi。環境變量沒有被設置,但CGI腳本以用戶身份運行而不是Apache。這是我的解決方法。

#!/bin/bash 
source "/home/username/.bashrc" 
rubyscript.cgi 

但是,我想一個真正的方式添加到寶石路在Ruby腳本本身避免這種變通方法,並發現這一點:

ENV["HOME"] = "/home/user" 
ENV["GEM_HOME"] = ENV["HOME"] + "/ruby/gems" 
ENV["GEM_PATH"] = ENV["GEM_HOME"] + ":/usr/lib/ruby/gems/1.8" 
ENV["GEM_CACHE"] = "GEM_HOME/cache" 
ENV["PATH"] = ENV["PATH"] + ":" + ENV["HOME"] + "/ruby/gems/bin" 

這可以被擺在了頭上Ruby腳本或者放在一個文件, 「要求」 開頭,即environment.rb中:

ENV["HOME"] = "/home/user" 
ENV["GEM_HOME"] = ENV["HOME"] + "/ruby/gems" 
ENV["GEM_PATH"] = ENV["GEM_HOME"] + ":/usr/lib/ruby/gems/1.8" 
ENV["GEM_CACHE"] = "GEM_HOME/cache" 
ENV["PATH"] = ENV["PATH"] + ":" + ENV["HOME"] + "/ruby/gems/bin" 

ruby​​.cgi:

#!/usr/bin/ruby 
require "environment" 
require "rubygems" 
require "json" 
puts "Content-type: text/json" 
puts "" 
puts "{'bacon':['yum','tasty']}"