为何`gem install`安装atk成功但`bundle install`失败?
解决bundle install安装atk gem失败的问题
错误原因分析
从报错日志能明确看到,构建atk原生扩展时触发了rake依赖缺失的错误:
can't find gem rake (>= 0.a) with executable rake (Gem::GemNotFoundException)
直接用gem install能成功,是因为全局Ruby环境已经安装了rake;但bundle install会启用隔离的gem环境,若你的Gemfile里没声明rake依赖,构建atk时就无法调用rake工具,最终导致安装失败。
解决方案
方案1:把rake添加到Gemfile
- 在项目的Gemfile中新增一行:
gem 'rake' - 清理之前的安装残留:
rm -rf vendor/bundle rm Gemfile.lock - 重新执行安装:
bundle install
方案2:临时让bundle调用全局rake
如果不想修改Gemfile,可以尝试让bundle在构建阶段使用全局安装的rake:
bundle install --with-development
或者先确认bundle能识别全局rake,再执行安装:
bundle exec rake -T bundle install
方案3:预安装atk到项目bundle目录
既然直接gem install atk -v 3.5.1能成功,可以把已安装的atk复制到项目的bundle路径里:
- 先查找atk的全局安装路径:
gem which atk - 将对应的atk目录复制到项目的
vendor/bundle/ruby/2.7.0/gems/路径下 - 再执行
bundle install,此时bundle会跳过atk的安装流程
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

