Gem rvm gemset copy 失败

tualatrix · 2012年02月19日 · 最后由 hooopo 回复于 2012年06月25日 · 4271 次阅读

我开始使用 rvm 的 gemset 功能,于是给 project 创建了一个 gemset 叫「imtx-on-rails」,然后尝试用 gemset copy 的功能把@global的复制给@imtx-on-rails

然而却失败了,log 显示 gem_pristine: command not found

不知道怎么装这个 pristine,好像没有这个 gem。

大家的 gemset 是怎么装的,难道新建一个 gemset 都完全从 0 开始装吗?

PS: rvm 的版本是 1.10.0

@tualatrix,不确定是否一定能可以,试试吧:

vim $rvm_path/scripts/gemsets

搜索unset GEM_PATH,看是否注释掉了,若没有则把这行注释掉,之后:

rvm gemset copy 1.9.3@global 1.9.3@imtx-on-rails

copy 时加上 ruby 的版本

@tualatrix 我已经一年多没用自已创建的 gemset 了。一律 bundle install --binstubs --path vender 将 project 依赖和可执行文件独立在开发目录下。

开发机的话其实可以不用 gemset production 我就设置为每个项目独立的 gemset,不用 global

#2 楼 @ashchan 学习了,这样很好。刚把我的 gemset 全干掉了,就用 bundle 了。

#2 楼 @ashchan 好主意!不过你是只在开发目录下这样做吗?那部署环境中是怎么样的?在部署的时候自动触发「bundle install --binstubs --path vender」吗?

@tualatrix 如果真想复制 gemset,其实每个 gemset 都只是~/.rvm/gems/下面的文件夹而已,所以直接复制文件夹或者 ln -s 即可,注意文件夹取名

#5 楼 @tualatrix Capistrano 默认部署是放在网站的 share 目录下的 bundler 目录中的,原理跟开发时一样。同时它会去掉 development 和 test 相关的 gem。部署时不需要 binstubs,因为 app server 会自动用 bundle exec。

另外,总体来说直接复制是安全的。但在 ruby 版本有变动的情况下,有些 gem(如一些需要编成 native 的库)有时会出怪异的问题。

开发时,不时地 bundle clean 一下把不用到了的 gems 清掉(用 --path 参数时 bundler 会自动做这个),既省空间又能避免这些问题:)

经过各种考量,我也决定放弃 gemset 的使用了,直接把 bundle 装在 project 好多了。

可以复制,晚饭前还执行了一下 rvm gemset copy 1.9.3@rails3 1.9.2@rails3 不过敲完回车就后悔了,我应该放在全局里

复制这个是因为我的 ruby1.9.3 版本 & rake 0.9.2 执行 rake test 的时候有问题

装了最新版的 rvm 后,可以直接rvm gemset copy oldset newset

不需要加 ruby 版本,应该是新版本 fix 了那个 bug

#7 楼 @ashchan 直接复制主要是一些 native 库可能出问题,因为引用 ruby 的动态库路径可能会变。

另有一问题请教,用 bundle 之后,pow 报错,貌似是没用 bundle exec 来启动,ashchan 有解决没。 之前用 rvm 的 gemset 使用 pow 是没有问题的。

#11 楼 @hhuai pow 应该是会自动认 bundle 的。试一下重装 pow 能不能解决。

我现在是一个框架(版本)建一个 gemset,比如 rails2.3.4 一个 gemset,3.2.1 又是一个 gemset,sinatra 又是一个 gemset。然后那些公用的工具库就往 global 里扔。gemset 要是能够继承就好了,会方便管理一些。还有各 ruby gems 的依赖关系再清楚些的话,结合 rvm,我感觉应该会是个蛮强大的工具。

#2 楼 @ashchan "bundle install --binstubs --path vender" 这里的 "vender"应该是"vendor"吧?

#14 楼 @ikbear 笔误,应为 vendor。

#13 楼 @yuan 在 rails2 的项目用 bundler,然后 gemset 就可以扔了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号