所以我将Ruby 1.9安装到/ usr / local / bin中并将Ruby 1.8.7保存在/ usr / bin中。将我的所有1.8 ruby,rails,rdoc等可执行文件重命名为ruby18,rails18等。
因此,在命令行中转到ruby --version
会给我:
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-darwin9.7.0]
如果我启动irb
会话并查看$:
变量,该变量会显示搜索任何require
或load
个来电的所有位置,该列表为作为OEM Ruby安装的一部分的Ruby 1.8位置!
test
/Library/Ruby/Site/1.8
/Library/Ruby/Site/1.8/powerpc-darwin9.0
/Library/Ruby/Site/1.8/universal-darwin9.0
/Library/Ruby/Site
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/powerpc-darwin9.0
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin9.0
.
我想也许irb
可执行文件仍然指向1.8,所以我确保shebang是正确的,它是:
#!/usr/local/bin/ruby
我想在还在这些位置搜索包含没有任何内在错误,但它看起来像是唯一的位置 - 它永远不会搜索lib / ruby19目录中的标准库。是什么给了什么?
如果我有Ruby直接向我提供$:
的内容并跳过irb
,看起来列表是正确的:
ruby -e 'puts $:'
/usr/local/lib/ruby19/1.9.1/test
/usr/local/lib/ruby19/gems/1.9.1/gems/actionmailer-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/actionpack-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/activerecord-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/activeresource-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/activesupport-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/daemons-1.0.10/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/eventmachine-0.12.8/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/rack-1.0.0/bin
/usr/local/lib/ruby19/gems/1.9.1/gems/rack-1.0.0/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/rails-2.3.2/bin
/usr/local/lib/ruby19/gems/1.9.1/gems/rails-2.3.2/lib
/usr/local/lib/ruby19/gems/1.9.1/gems/thin-1.2.2/bin
/usr/local/lib/ruby19/gems/1.9.1/gems/thin-1.2.2/lib
/usr/local/lib/ruby19/site_ruby/1.9.1
/usr/local/lib/ruby19/site_ruby/1.9.1/i386-darwin9.7.0
/usr/local/lib/ruby19/site_ruby
/usr/local/lib/ruby19/vendor_ruby/1.9.1
/usr/local/lib/ruby19/vendor_ruby/1.9.1/i386-darwin9.7.0
/usr/local/lib/ruby19/vendor_ruby
/usr/local/lib/ruby19/1.9.1
/usr/local/lib/ruby19/1.9.1/i386-darwin9.7.0
.
所以,听起来好像正在调用irb
的错误版本。但就像我说的那样,shebang系似乎正在与正确的Ruby可执行文件进行对话。
如果我直接用irb
调用ruby
,那么我会得到1.9包含的正确列表:
ruby /usr/local/bin/irb
这真的很奇怪......
答案 0 :(得分:1)
好吧,我最终做的只是注销终端会话并开始新会议。现在当我运行irb
时,我得到了1.9个位置的正确列表。
终端确实认为之前正在运行正确的终端,但是:
which irb
/usr/local/bin/irb
耸肩
答案 1 :(得分:0)
听起来好像是Bash PATH缓存的情况。将来,可以使用hash -r
清除。