【问题标题】:Ruby can't find gems .... even though all paths seem to be correctRuby 找不到宝石....即使所有路径似乎都是正确的
【发布时间】:2011-10-24 23:02:13
【问题描述】:

安装了 Ubuntu 11.10,完全删除了 Ruby1.8.7,然后从源代码安装了 Ruby1.9.2-p290,然后是 ruby​​gems1.8.10。这是我为安装运行的脚本...

#!/bin/bash
#===============================================================================
#
#          FILE:  install_ruby_1.9.sh
# 
#         USAGE:  ./install_ruby_1.9.sh 
# 
#        AUTHOR: Ryan Schulze (rs), ryan@dopefish.de
#       CREATED: 07/07/2011 11:59:37 AM CDT
#===============================================================================

Version="1.9.2-p290"
GZFile="ruby-${Version}.tar.gz"
Download="http://ftp.ruby-lang.org/pub/ruby/1.9/${GZFile}"

if [[ "$(id -u)" != "0" ]]
then
echo "You need root permission to execute this script"
exit
fi

apt-get -q update
apt-get -qy upgrade
apt-get install -qy build-essential wget zlib1g-dev libssl-dev libffi-dev autoconf

cd /usr/local/src/
test -e ${GZFile} || wget ${Download}
tar -xzf ${GZFile}
cd ruby-${Version}

autoconf
./configure --with-ruby-version=${Version} --prefix=/usr --program-suffix=${Version} 
make
make install

mkdir -p /usr/lib/ruby/gems/${Version}/bin

update-alternatives \
    --install /usr/bin/ruby ruby /usr/bin/ruby${Version} $(echo ${Version//./}|cut -d- -f1) \
    --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz /usr/share/man/man1/ruby${Version}.1 \
    --slave   /usr/lib/ruby/gems/bin        gem-bin   /usr/lib/ruby/gems/${Version}/bin \
    --slave   /usr/bin/irb  irb  /usr/bin/irb${Version} \
    --slave   /usr/bin/gem  gem  /usr/bin/gem${Version} \

    update-alternatives --config ruby
    update-alternatives --display gem >/dev/null 2>&1 && update-alternatives --remove-all gem

...

脚本运行完美,ruby 运行良好....除了 ruby​​gems(也从源代码安装):

$: irb
irb(main):001:0> require 'rubygems'
=> false

但是,它指向正确的版本:

$: which gem
/usr/bin/gem
$: file /usr/bin/gem
/usr/bin/gem: symbolic link to `/etc/alternatives/gem'
$: file /etc/alternatives/gem
/etc/alternatives/gem: symbolic link to `/usr/bin/gem1.9.2-p290'

另外,这里是 gem 环境:

$: gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.10
  - RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.9.2-p290/bin/
  - RUBY EXECUTABLE: /usr/bin/ruby1.9.2-p290
  - EXECUTABLE DIRECTORY: /usr/lib/ruby/gems/1.9.2-p290/bin/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.9.2-p290/bin/
     - /home/rbanerjee/.gem/ruby/1.9.2-p290
     - /usr/lib/ruby/gems/1.9.2-p290
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

我不知道发生了什么。当我在另一台机器上从 1.8.7 升级到 1.9.1 时,类似的升级也奏效了。我已经尝试提供所有细节,这是一个很长的问题。任何帮助都将不胜感激。

【问题讨论】:

  • which irb 是否指向 /usr/bin/irb?
  • 尽管问题已经通过 Dylan 在下面的回答解决了很长一段时间,但还是感谢您指出这一点。是的,which irb 确实返回了/usr/bin/irb

标签: ruby rubygems ruby-1.9.2


【解决方案1】:

在 Ruby 1.9 中,require 'rubygems' 总是返回 false。 Rubygems 包包含在 1.9 中,因此您无需单独要求它。

您是否发现错误返回值之外的问题? (即你的宝石实际上没有工作吗?)

【讨论】:

  • 感谢您的回复。 Ruby1.9.x 是这种情况,还是只是 1.9.2 及更高版本(未来)?我之前有 1.9.1,并且经常用 irb 测试所有 gem,我的第一行总是“需要 'rubygems'”,只是出于习惯。无论如何,在阅读了您的回复后,我跑去要求我所有的宝石,它们似乎工作正常!谢谢 :-) 呃……我花了半天时间,现在觉得自己很愚蠢!
  • 我没有安装 1.9.1,所以我不能确定。但是,false 返回值不一定会搞砸任何事情。您仍然可以使用require 'my_gem' 声明来跟踪它,它应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2016-02-15
  • 1970-01-01
相关资源
最近更新 更多