几天前,本身朝圣的心态,试用了 zsh,确实相当的强大,但是,也发现了一些问题,主要和 rvm 相关的。
首先是,rvm 补全时,比如rvm cur<TAB>
时会出现这样:
rvm curWarning! PATH is not properly set up, '/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin' is not at first place,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use ruby-1.9.3-p551@tophold'.
current
Warning! PATH is not properly set up, '/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin' is not at first place,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use ruby-1.9.3-p551@tophold'.
ruby-1.9.3-p551@tophold
这个,还可以忍受,难以忍受的是,设定的.ruby-gemset
和.ruby-version
时而能工作,时而不能工作。比如,使用rvm use 1.9.3@tophold --default
设定了默认的环境。
然后,尝试一下 ruby 2.1.2 和 rails 4,锁定 ruby 和 gemset,然后 bundle 成功了,重开了一个 tab 页,rvm 的环境又变回去了。请问,各位大神,有遇到这个问题吗??
# .bashrc
WHITE="\[\033[0m\]"
YELLOW="\[\033[0;33m\]"
PS1="\w $YELLOW\$(git branch 2>/dev/null | grep '^*' | colrm 1 2)$WHITE\$ "
我也有这个问题,各种谷歌,stackoverflow 无果,ruby 重装了好几遍,最后卸载了oh-my-zsh
。
rvm curWarning! PATH is not properly set up, '/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin' is not at first place,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use ruby-1.9.3-p551@tophold'.
current
#5 楼 @flowerwrong 原因是 rvm 要求把 .rvm/xx/bin 放到 PATH 的第一位。zsh 看 .zshrc
里面有 rvm 的配置了没,后面有没有其它修改 PATH 的配置。
#5 楼 @flowerwrong 我换了一个 shell 框架,bash_it,发现,这个问题更严重了,几乎,没执行一个命名,都会弹出这个提示:
ll
total 132
drwxrwxr-x 26 xiajian xiajian 4096 5月 22 17:49 .
drwxr-xr-x 81 xiajian xiajian 4096 5月 22 18:18 ..
drwxrwxr-x 2 xiajian xiajian 4096 5月 20 15:08 archives
....
drwxrwxr-x 2 xiajian xiajian 4096 5月 20 15:08 tmp
drwxrwxr-x 2 xiajian xiajian 4096 5月 22 16:54 user
-rw-rw-r-- 1 xiajian xiajian 8 5月 20 14:48 VERSION
drwxrwxr-x 2 xiajian xiajian 4096 5月 22 17:14 wrappers
Warning! PATH is not properly set up, '/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin' is not at first place,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use ruby-1.9.3-p551@tophold'.
追踪了一下,这个提示大概出现在 .rvm/scripts/functions/cli
中的第 27 到 34 行:
__rvm_path_match_gem_home_check_warning_missing()
{
rvm_warn "\
Warning! PATH is not properly set up, \$GEM_HOME is not set,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use $1'."
}
所以,我觉得,这不是 oh-my-zsh 的问题,应该是为了自动补全 rvm,执行的 rvm 上面的函数的问题。不明白的是,为何哪个 path 要放在第一个。
#11 楼 @rei 我的 PATH 是这样的/home/xiajian/.nvm/v0.10.35/bin:/home/xiajian/.rbenv/bin:/home/xiajian/.pyenv/bin:./node_modules/.bin:/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin:/home/xiajian/.rvm/gems/ruby-1.9.3-p551@global/bin:/home/xiajian/.rvm/rubies/ruby-1.9.3-p551/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xiajian/.rvm/bin:/home/xiajian/.rvm/bin:/opt/nginx/sbin:/home/xiajian/.gem/ruby/1.9.1/bin:/home/xiajian/.bash_it/plugins/available/todo:/home/xiajian/.rvm/bin:/home/xiajian/.rvm/bin
你的意思是,要/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin
这设置为第一个。
#13 楼 @rei 我大概明白了,在 oh-my-zsh 以及 bash-it 中,rvm 确实没办法将/home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin
放到第一个,而在纯的 bash 中,却可以做到, /home/xiajian/.rvm/gems/ruby-1.9.3-p551@tophold/bin:/home/xiajian/.rvm/gems/ruby-1.9.3-p551@global/bin:/home/xiajian/.rvm/rubies/ruby-1.9.3-p551/bin:/home/xiajian/.rvm/bin:/home/xiajian/.nvm/v0.10.35/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
。尽管我觉得配置都一样。各种 shell 框架中的 souce 执行 shell 文件,确实很坑爹啊。
我也好奇 rvm 为什么一定要占用 PATH 的首位。找到这个 issues https://github.com/rvm/rvm/issues/2050
似乎 rvm 切换版本的原理是把 PATH 首位去掉,再加上新的 PATH,如果 rvm 不是 PATH 首位就会有问题。
我今天又在 zsh 中尝试了一下,似乎不光 rvm 喜欢占 PATH 的首位。nvm 也喜欢占首位,而且,我今天遇到的问题是 nvm 把首位给抢过去了,这样问题就又出现了。
使用rvm use 1.9.3@tophold --default
,命令只能维持一时的作用,重开一个 tab 页,依然如故。我怀疑,是升级的 rvm 版本的问题。
#18 楼 @xiajian 每次新开 tab 都是打开一个新的 shell,配置会重载一遍。
既然你也用 rbenv 了,那就不用 rvm 咯。rbenv 要求使用者自己配置 PATH,不动态修改 PATH 没有这个问题。
我是使用 PPA 安装,不用 vm 了。http://chloerei.com/2014/07/13/the-best-way-to-install-the-latest-version-of-ruby-on-ubuntu/
#20 楼 @kgen 这个 PPA 是 brightbox 维护,brightbox 是主机提供商,他们关系跟 Passenger 不错:https://blog.phusion.nl/2015/05/20/phusion-passenger-5-0-8-new-debian-packages-red-hat-packages-bug-fixes/#specialthankstobrightbox
Rails 的这个项目用到了这个 PPA https://github.com/rails/rails-dev-box/blob/f262f96429c06678137e31979003693b153dd7c3/bootstrap.sh#L10