Ruby [姨妈] 终于把 rvm 换成 rbenv 了

luikore · 发布于 2013年12月08日 · 最后由 luikore 回复于 2014年3月18日 · 6607 次阅读
2880

后知后觉...

主要是 rvm 几点不太爽:

  • gemset 和 bundler 功能重复
  • autolib 太傻瓜
  • rubygems-bundler 自作聪明

rbenv 就没这些问题. brew install rbenv ruby-build rbenv-gem-rehash 改改启动脚本就好了, 弄起来还挺简单的, 重新安装 ruby 速度也飞快

CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)" rbenv install -k -v 2.1.0-dev
共收到 40 条回复
202

我去,必须chruby啊。

6061

rvm 好像计划用ruby重写,搞不懂, 为本来简简单单的事情弄个如此复杂的壳, 吃饱了撑着.

2880

#1楼 @xds2000 chruby 除了没有 shim 外还有什么好处吗?

4584

这段时间我也把mac和新服务器的rvm都换成rbenv了,体验中,估计不会换回rvm了

2880

#1楼 @xds2000 chruby 不认 .rvmrc 比较不爽 (好多项目都还没改成 .ruby-version)... 好像也没有 rbenv 那样可以 rbenv shell 切版本不影响默认版本的做法?

1342

其实我觉得吧不用来回切换 ruby 环境的话用 ruby-install 也挺好的

322

我觉着用 10.9 自带的 Ruby,然后改改 $GEM_HOME 成 ~/.gem/ruby/2.0.0,并且把 $GEM_HOME/bin 加到 $PATH 就 OK 了

775

我选择rbenv的原因是debian里面有rbenv,没有chruby和rvm

202

@luikore chruby是最简的。这就是好处。就是切换ruby version的功能。ruby-install可以安装你需要的版本。

96

2和3 深有体会 一个版本控制承载了太多不必要的功能

96

我在 Linux 上几个月前就换成 rbenv 了 但是在 OS X 上几个月前尝试过一次,失败了。

244

#9楼 @xds2000 这哥们真逗

How good is it? I don't know, I've been using it for less than 24 hours. Seems good.

78

#1楼 @xds2000 我去,必须 chruby 啊。

186

#1楼 @xds2000 太小众也不好啊,很多工具就不支持了,比如 pow

487

gemset 和 bundler 功能重复

也不能这么说吧 。。。

不过rbenv是比较轻量

2880

#15楼 @blackanger 或者这样说? 和 bundler 功能交叉, 作为隔离环境又不如虚拟机

487

#16楼 @luikore 回复好神速。 这么说到是有点道理。

78

#14楼 @doitian 支持 pow 的。

186

#18楼 @ashchan 选版本得自己改 .powrc 不方便

78

#19楼 @doitian 恕我无知, rvmpow 一起用的时候是不用指定的吗?

186

#20楼 @ashchan rvm 和 rbenv 都只要 .ruby-version 或者 .rbenv-version 这些文件指定版本就好了

78

#21楼 @doitian 我在 chruby 下也是用 .ruby-version 的,跟 pow 结合的确需要在项目下放 .powrc 文件。不知道 rvm 下不用 .powrc 也可以根据 .ruby-version 来自动切版本,不明觉厉啊。

487

据小道消息, rubygmes将来会把bundler的功能集成,以后就没bundler这东西了。

186

#22楼 @ashchan 所以说太小众,和其它工具集成就会稍微麻烦点

96

话说以前装过多次on my zsh + rvm 一直没出过问题,昨天重装了系统安装rvm失败才发现官网和stackoverflow上都说两者不太兼容。。。。

177

rbenv也有坑,他的gemset很爽,支持继承关系,但是不支持rubymine

5122

#26楼 @gene_wu 现在的RubyMine已经支持rbenv了。

177

#27楼 @apexy 不支持rbenv-gemset,就基本没用除非不用gemset

5122

#28楼 @gene_wu 在rbenv下仍用gemset,其实还是延用rvm的思想。完全可以不用,直接bundle就足够了。

而且这样同时rubymine也是完美支持的了。

177

#29楼 @apexy 项目多就乱了

100

rubygems-bundler 自作聪明 +1

96

#31楼 @jan 这个自作聪明是啥意思..?

96

我是从 rbenv 换到了 rvm.

原因是自己用 rbenv 编出来的老是不能在 irb 里面输入中文, 虽然知道其根本原因是使用了错误的 readline 库, 但是一直都处理不好, 一怒之下就换了 rvm.

另外 rvm 良好的处理了多用户服务器环境下的管理. 比如我用 root 安装 rvm 和 ruby, 但是用另一个普通用户运行 app 这种场景, rvm 能帮你搞定. 而 rbenv 则需要你有一定的 SA 能力才能处理好.

真正让我选择 rvm 的原因是:

  • 它有 offline 安装的方法, 对我来说很重要, 我有很多机器都不能上外网.
  • 有一个 binary 功能, 可以让我自己打包一个适应本地环境的 ruby, 避免在每个服务器上编译

再求教一下, 列出的理由 2 和 3, 我其实没看懂.

2880

#33楼 @ruohanc 我这 readline 正常... 用 ruby-build 装不会出什么问题啊

我有 .bashrc 和 .zshrc 同时载入一个公共的 .profile, 如果把 rvm 环境脚本放到 .profile 中, 每次升级 rvm 都会提示, 很烦人, 不得已就放了两份.

rvm 通过 autolib 管理依赖的, 然后 rvm 就把依赖隐藏起来了不让你知道了, 如果把 autolib 级别调低, 明明装了一个 libyaml 但版本不是它喜欢的就不能通过很蛋疼. 在 linux 上我完全可以在无管理员权限的状态下把所有依赖和 ruby 都编译好放到一个目录中交给 rbenv, 用 rvm 就不行. rbenv 有目录就可以切换了, 拷贝 binary ruby 可以连带 gem 一起拷, 而 rvm 的 gem 和 ruby 都不在一个地方的...

96

#34楼 @luikore 我对依赖没啥想管的. 所以我觉得 autolib 帮我整的挺好的. 然后嘛, 你都自己编译好 ruby 了, 已经比较违反使用工具管理的初衷了嘛, 这是何以呀.

继续问..理由 3 是啥意思..

2880

#35楼 @ruohanc rvm 自带了一个叫做 rubygems-bundler 的东西, 结果 gem 带的可执行文件都会被它加上个 no exec wrapper 非常恶心, 这个东西和新版本 rubygems 检查 Gemfile 的特性是打架的...

96

ok 基本搞定, Rbenv 系统级的安装, 也解决了权限问题, 使用了组权限. 把需要完全控制 rbenv 的用户加入 rbenv 组就可以了

GIST: https://gist.github.com/crhan/8064624#file-rbenv-install-system-wide-sh

RBENV_PREFIX="/usr/local/rbenv"
RBENV_GROUP="rbenv"

## Install rbenv
git clone git://github.com/sstephenson/rbenv.git $RBENV_PREFIX

## Add rbenv to the path:
echo '# rbenv setup' > /etc/profile.d/rbenv.sh
echo "export RBENV_ROOT=${RBENV_PREFIX}" >> /etc/profile.d/rbenv.sh
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh

chmod +x /etc/profile.d/rbenv.sh
source /etc/profile.d/rbenv.sh

## set rbenv group property
groupadd $RBENV_GROUP
chown -R :rbenv $RBENV_PREFIX
sudo find $RBENV_PREFIX -type f -perm /100 -exec chmod g+x {} \;
sudo find $RBENV_PREFIX -type f -perm /200 -exec chmod g+w {} \;
sudo find $RBENV_PREFIX -type d -exec chmod g+rwxXs {} \;

## Install ruby-build:
pushd /tmp
  git clone git://github.com/sstephenson/ruby-build.git
  cd ruby-build
  ./install.sh
popd

## Install Ruby 1.9.2-p290:
#rbenv install 1.9.3-p484
#rbenv global 1.9.3-p484

## Rehash:
#rbenv rehash
96

写了一个帖子讨论这个安装问题: rbenv system wide install (support for multi-user usecase)

10027

想问各位大大: 我在centos6下安装的rbenv, 再用rbenv安装ruby2.1.0和1.9.3都没问题, 然后我用gem install rails也没问题, 但: 当我,rails new blog的时候,报错了: /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in require': /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-linux/digest/md5.so: undefined symbol: rb_Digest_MD5_Init - /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/2.1.0/x86_64-linux/digest/md5.so (LoadError) from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:inrequire' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.4/lib/rails/generators/app_base.rb:1:in <top (required)>' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:inrequire' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in require' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.4/lib/rails/generators/rails/app/app_generator.rb:1:in' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in require' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:inrequire' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.4/lib/rails/commands/application.rb:29:in <top (required)>' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:inrequire' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in require' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.4/lib/rails/cli.rb:15:in' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in require' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:inrequire' from /home/zengfb/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.0.4/bin/rails:9:in <top (required)>' from /home/zengfb/.rbenv/versions/2.1.0/bin/rails:23:inload' from /home/zengfb/.rbenv/versions/2.1.0/bin/rails:23:in `

' 有同病相连的么,或者各位有什么建议

2880

#39楼 @u1384048594 大概是安装 ruby 前没把 openssl 装上的问题, 参考:

sudo yum -y install sqlite-devel sqlite openssl openssl-devel readline-devel readline compat-readline5 libxml2-devel libxslt-devel libcurl curl wget git 
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册