是 @luikore 吕大神的帖子 [姨妈] 终于把 rvm 换成 rbenv 了, 讨论 rbenv 比之 rvm 不足的地方,我列了这么四点
今天来尝试用 rbenv 解决上述问题
通过 linux 的组权限解决,不完美,有点小问题。
问题在 umask 的设置上,系统默认是 umask 022
即组权限默认抹去 写权限. 在类似的场景下可能会出现 permission deny: 用户 A 在 gem 的默认位置上安装了 gem A, 但是用户 B 想把它删掉
解决这个问题的根本办法是请在 production 环境里面使用 bundle install --deployment
谢谢!
这部分没有写在脚本里,按照两步走:
linux 的安全性问题就不赘言了,总之你需要用一个独立的帐号来运行你的 rails app, 那么你应该这么做
折腾个什么劲啊,用 capistrano-rbenv 呗
PREFIX="/usr/local"
RBENV_PREFIX="$PREFIX/rbenv"
BIN_PATH="$PREFIX/bin"
RBENV_GROUP="rbenv"
umask 002
## Install rbenv, ruby-build and rbenv-gem-rehash
git clone git://github.com/sstephenson/rbenv.git $RBENV_PREFIX
mkdir $RBENV_PREFIX/plugins
git clone git://github.com/sstephenson/ruby-build.git $RBENV_PREFIX/plugins/ruby-build
git clone git://github.com/sstephenson/rbenv-gem-rehash.git $RBENV_PREFIX/plugins/rbenv-gem-rehash
## add rbenv script to PATH
ln -s $RBENV_PREFIX/bin/rbenv $BIN_PATH/rbenv
## Add rbenv to the System wide profile:
## @note profiles only will be sourced in `login shell`,
## see the difference here(Chinese): https://gist.github.com/yegle/1564928
cat <<EOF > /etc/profile.d/rbenv.sh
# rbenv setup
export RBENV_ROOT=${RBENV_PREFIX}
eval "\$(rbenv init -)"
EOF
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
find $RBENV_PREFIX -type d -exec chmod g+Xs {} \;
## Install Ruby
#rbenv install 1.9.3-p484
#rbenv install 2.0.0-p353
#rbenv global 2.0.0-p353
## Rehash:
#rbenv rehash
经过线上验证,rbenv + ruby 完全可以通过 tar 包的方式快速部署到每一个服务器上(每个环境打一次包,用上面提供的脚本就行),我这里有一个 chef 的配置给大家参考: