首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在rbenv中复制早期版本Ruby中的gem

在rbenv中复制早期版本Ruby中的gem
EN

Stack Overflow用户
提问于 2012-12-01 00:32:57
回答 2查看 3.9K关注 0票数 20

我用rbenv安装了Ruby 1.9.3-p286。现在,在安装了一个较新的版本(p327)之后,很明显,它对与上一个版本一起安装的GEMs一无所知。

有没有可能将Gems从那个版本复制到新的版本,这样就不需要重新下载它们了?

EN

回答 2

Stack Overflow用户

发布于 2012-12-01 00:44:36

您可以复制gems/bin/文件夹,但这会导致问题。bin/中的文件中包含硬编码路径。

我建议重新安装它们,就像这样简单:

代码语言:javascript
复制
$ rbenv local 1.9.3-p286
$ gem list | cut -d" " -f1 > my-gems
$ rbenv local 1.9.3-p327
$ gem install $(cat my-gems)
票数 34
EN

Stack Overflow用户

发布于 2016-07-08 00:12:17

为了后人,我写了rbenv-copy-gems.sh来帮助我做到这一点。它不符合这个问题的标准(它是从Internet安装的,而不是本地安装的),但在我通过rbenv install升级或安装新版本的Ruby时,它对我很有用。

当前版本粘贴在下面以供参考,但我在进行改进时会保持最新的要点。

代码语言:javascript
复制
#!/bin/bash
# copy is a misnomer; it's actually LIST + INSTALL
# --from 2.2.1 [--to other-version-else-whatever-is-currently-set]
#
# TODO: install only most-recent version that's installed in FROM
# TODO: use gem names only from FROM, install latest available version (might be more recent than in FROM)
# TODO: pass arguments to gem command (e.g. --no-document)

CURRENT_VERSION=`rbenv version | cut -d' ' -f1`
GEM_LIST_ARGS="--local"

while [[ $# -gt 0 ]]; do
  option="$1"

  case $option in
    --from)
    FROM="$2"
    shift
    ;;
    --to)
    TO="$2"
    shift
    ;;
  esac
  shift # past argument or value
done

if [ -z "${FROM}" ]; then
  FROM="${CURRENT_VERSION}"
fi

if [ -z "${TO}" ]; then
  TO="${CURRENT_VERSION}"
fi

echo ">>> Install gems from v${FROM} to v${TO}"

# Get gems and versions, reformat to GEMNAME:version[,version[...]]
gems=(`RBENV_VERSION=${FROM} gem list ${GEM_LIST_ARGS} | sed -e 's/[\(\)]//g' -e 's/, /,/g' -e 's/ /:/'`)

for geminfo in "${gems[@]}"; do
  gem=`echo $geminfo | cut -d: -f1`
  versions=(`echo $geminfo | sed -e 's/^.*://' -e 's/,/ /g'`)
  for version in "${versions[@]}"; do
    installed=`RBENV_VERSION=${TO} gem query -i $gem -v $version`
    if [ "${installed}" == "false" ]; then
      echo ">>> Installing ${gem} ${version}:"
      RBENV_VERSION=${TO} gem install $gem -v $version
    else
      echo ">>> ${gem} ${version} already installed"
    fi
    echo ""
  done
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13649241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档