Ruby要求加载错误

Ruby要求加载错误,ruby,gem,require,Ruby,Gem,Require,我试图要求两个gem:json和rinku 我正在使用一个托管的Linux设备,没有root/sudo访问权限,最后在我的主目录中安装了gems: -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

我试图要求两个gem:json和rinku

我正在使用一个托管的Linux设备,没有root/sudo访问权限,最后在我的主目录中安装了gems:

-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

我正忙得不可开交——有人能帮忙吗


更新:

谢谢你的反馈!根据您的一些建议,我阅读了
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$ 
-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':没有这样的文件要加载——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
需要“rubygems”
需要“json”
需要“net/https”
需要“uri”
需要“林库”
需要“optpass”
OptionParser.new do|o|
o、 在('-d',“打开调试消息”){| b |$debug=b}
o、 在('-h',“打印此帮助屏幕”){puts o;exit}
o、 解析!
终止
如果$debug,则将“[*]开始…”
#Setenv捕获json gem
ENV['GEM_PATH']='~/ruby/gems'
如果$debug,则放置“ENV”+ENV['GEM_PATH']
-jailshell-3.2$export GEM\u PATH=~/ruby/gems
-jailshell-3.2$ruby./gettweets.rb-d
[*]正在启动。。。
ENV~/ruby/gems
[*]Filepath=/home/cygnetrc/www/drupal/tweets.html
女子单人双桨的皇后——回顾奥林匹克历史:http://t.co/d0YmNr40 #赛艇#wr#伦敦2012#奥运会
6月8日星期五16:05:38
1周后#WRCMunich!NZL的风暴乌鲁将与@petertaylorNZ进行LM2x比赛。在这里,乌鲁谈论团队合作:http://t.co/NvjRgtwW
6月8日星期五14:38:02
2012年残奥会资格认证流程已完成:http://t.co/D6DRG0bO #赛艇#适应性#残奥会#2012伦敦#wr
6月8日星期五13:23:14
符合事实的 [*]完成 -监狱-3.2美元
我通过ApacheModu cgi运行Ruby时遇到了类似的问题。没有设置环境变量,但是CGI脚本是作为用户而不是Apache运行的。这是我的变通办法

#!/bin/bash
source "/home/username/.bashrc"
rubyscript.cgi
但是,我想用一种真正的方法在Ruby脚本本身中添加gems路径,以避免这种解决方法,并发现:

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脚本的头部,也可以放在一个文件中,并在开头“required”,即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']}"

您是否查看了在
.gemrc
中定义的
gempath
?试着移除它,看看是否有帮助。帮自己一个忙,使用rvm。