我在 linux 上使用 rvm gemsets 来处理带有旧版本 rails 和 ruby 的 rails 应用程序。除了 rubygems 没有看到 ruby 或 gem 的正确路径之外,一切都有意义。为了说明,我想使用 ruby 1.8.7 和一个名为 smsx 的 gemset
➜ rails git:(master) ✗ rvm current
ruby-1.8.7-p371@smsx
正如预期的那样
➜ rails git:(master) ✗ echo $GEM_PATH
/home/matt/.rvm/gems/ruby-1.8.7-p371@smsx:/home/matt/.rvm/gems/ruby-1.8.7-p371@global
然而
➜ rails git:(master) ✗ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.25
- RUBY VERSION: 1.9.3 (2013-02-06 patchlevel 385) [i686-linux]
- INSTALLATION DIRECTORY: /home/matt/.rvm/gems/ruby-1.9.3-p385
... more ...
- GEM PATHS:
- /home/matt/.rvm/gems/ruby-1.9.3-p385
- /home/matt/.rvm/gems/ruby-1.9.3-p385@global
... more ...
所以 rubygems 认识到我正在使用 rvm,但认为我正在使用不同的 ruby 和默认 gemset。就像 rubygems 完全忽略了相关的环境变量。
关于可能原因的任何建议?
编辑:
应要求提供的附加信息
➜ rails git:(master) ✗ echo $PATH
/home/matt/.rvm/gems/ruby-1.8.7-p371@smsx/bin:/home/matt/.rvm/gems/ruby-1.8.7- p371@global/bin:/home/matt/.rvm/rubies/ruby-1.8.7-p371/bin:/home/matt/.rvm/bin:/home/matt/.rvm/gems/ruby-1.9.3-p385/bin:/home/matt/.rvm/gems/ruby-1.9.3-p385@global/bin:/home/matt/.rvm/rubies/ruby-1.9.3-p385/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
➜ rails git:(master) ✗ which gem
gem () {
typeset result
(
typeset rvmrc
rvm_rvmrc_files=("/etc/rvmrc" "$HOME/.rvmrc")
if [[ -n "${rvm_prefix:-}" ]] && ! [[ "$HOME/.rvmrc" -ef "${rvm_prefix}/.rvmrc" ]]
then
rvm_rvmrc_files+=("${rvm_prefix}/.rvmrc")
fi
for rvmrc in "${rvm_rvmrc_files[@]}"
do
[[ -s "${rvmrc}" ]] && source "${rvmrc}" || true
done
unset rvm_rvmrc_files
command gem "$@"
) || result=$?
hash -r
return ${result:-0}
}
我正在使用 oh-my-zsh。