我用rbenv安装了Ruby 1.9.3-p286.现在,在安装了较新版本(p327)之后,很明显,它对以前版本安装的GEM一无所知.
是否可以将Gems从该版本复制到较新版本,以便不再需要将它们全部下载?
小智 29
你可以复制gems/和bin/文件夹,但这会导致麻烦.
文件中bin/包含硬编码路径.
我建议改为重新安装它们,如下所示:
$ rbenv local 1.9.3-p286
$ gem list | cut -d" " -f1 > my-gems
$ rbenv local 1.9.3-p327
$ gem in $(cat my-gems)
Run Code Online (Sandbox Code Playgroud)
我一直在从升级和重新安装的角度来看这个,而不下载.这不是微不足道的,我建议你做一些宝石的清理,以尽量减少需要完成的处理/安装量(例如,我安装了五个版本的ZenTest;在这之前我做了'gem cleanup ZenTest').但要小心'gem cleanup',因为它删除了除LAST版本以外的所有版本:如果你需要支持旧版本的Rails,请手动清理你不需要的版本.
我将此脚本称为"migrate-gems.sh":
#! /bin/bash
if [ ${#} -ne 2 ]; then
echo >&2 Usage: $(basename ${0}) old-version new-version
exit 1
fi
home_path=$(cd ~; pwd -P)
old_version=${1}
new_version=${2}
rbenv shell ${old_version}
declare -a old_gem_paths old_gems
old_gem_paths=($(gem env gempath | sed -e 's/:/ /'))
rbenv shell ${new_version}
for ogp in "${old_gem_paths[@]}"; do
case "${ogp}" in
${home_path}/.gem/ruby*|*/.gem/ruby*)
# Skip ~/.gem/ruby.
continue
;;
esac
for old_gem in $(ls -1 ${ogp}/cache/*.gem); do
gem install --local --ignore-dependencies ${ogp}/cache/${old_gem}
done
done
Run Code Online (Sandbox Code Playgroud)
这项工作有三个部分:
gem env gempath包含:安装gem 的路径(-separated).因为宝石在〜/ .gem/ruby中共享,所以我跳过这个.gem install接受--local,强制没有网络连接.gem install接受--ignore-dependencies,禁用依赖性检查.我有一个相当大的宝石列表今天要移动,我不想从rubygems.org下载(加上,我需要旧版本),所以我很快就掀起了这个.
| 归档时间: |
|
| 查看次数: |
3447 次 |
| 最近记录: |