新手问题 每次 bundle install 都出现要求 gem install x -v' xxx'

drine · 2015年07月29日 · 最后由 douxiance 回复于 2015年07月29日 · 2892 次阅读

每次执行 bundle install,

都出现 An error occured while installing XXX, and Bundler cannot continue. Make sure that X succeeds before bundling.

X 的内容就是“gem install x -v' xxx'”,手工输入很多很麻烦,有没有一条命令可以解决的啊? 在 stackoverflow 里查了有跟我一样的问题,但没有发现很好的解决方法。

因为 Gemfile.lock 里使用的版本和当前环境的版本不同,或冲突,所以你先检查一下当前安装的 gem 和引用它的 gem 版本是否一致。通常,多个项目使用同一个 gem,而各自又引用不同的版本,会造成这个问题。

简单的解决办法是,如果是 rvm,可以建一个独有的 gemset,这样能避免很多以上情形。

因为安装过程出错了,具体原因是各异的,也许是缺少编译工具,也许是缺少依赖的库,没有万能办法一条命令解决。

我也遇到过类似问题,一个 bundle install 搞不定,结果手动执行了 n 个“gem install x -v' xxx'”

bundle update

有可能是网络问题,比如 Gemfile 里边的 source 是 rubygems.org,但是这个可能因为网络问题,导致你不管怎么 bundle 都会失败。但是恰巧你的电脑上的 gem source 是淘宝的,ruby.taobao.org,这个是可以用的源,所以你在执行 gem install 'xxx' 的时候就可以单独成功安装了。于是如此反复,就会出现你说的需要反复输入 gem install xxx 的情况了。

注意: 正是因为 gem 跟 Gemfile 都可以自己设置 source,所以执行 bundle installgem install 时,不一定都是从同一个源下载 gem,所以 bundle install 是否正常跟 gem install 是否正常,我觉得没太大必然关系,除非你两边都是同一个 source。

总结之,如果出现 bundle 失败,一般有几种可能原因: 1) 版本冲突,可能不同 gem 有相同依赖项,但是各自又依赖了相互冲突的两个不同版本,这个时候 bundler 无法继续往下走。这个时候的错误信息一般包含 compatible 等字眼; 2) 网络问题,可以尝试更换一个源地址,这个跟我前边的回答也比较相关; 3) 系统依赖,跟 #2 楼 @rei 提到的是一样的,一般都是缺少了本地的头文件或者可执行程序,比如 rmagick 依赖系统的 ImageMagick,mysql2 这个 gem 依赖于系统的 mysql-client-dev 头文件包,一些 PDF 处理相关的 gem 依赖 GhostScript,这个时候一般会有包含类似 Build native extension failed 之类的错误。

以上是我能想到的三种常见错误了,楼主自行再检查下吧,我估计只是网络问题。 (PS:不好好午休,扯了这么多题外话,我也真是够了,鄙视下自己)

#5 楼 @martin91 再不点赞说不过去了哈。

附和一下,凑个人气!

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