怎么在rbenv中从以前版本的Ruby复制gem?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我用rbenv安装了Ruby1.9.3-p 286。现在,在安装了一个更新的版本(P 327)之后,很明显,它找不到与上一个版本一起安装的GEM。

是否有可能将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

用户回答回答于

你可以复制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)

扫码关注云+社区