新Mac(OSX12.6)上Rails5旧项目无法生成Gemfile.lock求助
解决Rails 5项目在OSX 12.6上的依赖更新与安装问题
一、Bundler.with_clean_env代码的使用方式
这段Ruby代码用于在无环境变量干扰的干净环境中执行bundle install,有两种使用方法:
通过irb临时执行
- 打开终端,切换到项目根目录:
cd /path/to/myapp - 启动Ruby交互环境:
irb - 粘贴修改后的代码(路径换成你的项目实际路径,若已在项目目录可简化为
Dir.chdir(Dir.pwd))执行:Bundler.with_clean_env { Dir.chdir("/path/to/myapp") { `bundle install` } } - 执行完退出irb:
exit
- 打开终端,切换到项目根目录:
写成脚本文件执行
- 在项目根目录创建
clean_bundle.rb文件,内容如下:Bundler.with_clean_env do Dir.chdir("/path/to/myapp") do system("bundle install") end end - 终端执行脚本:
ruby clean_bundle.rb
- 在项目根目录创建
二、Gemfile.lock无法更新/重新生成的解决步骤
检查Gemfile版本约束
打开Gemfile,确认是否有gem被固定旧版本(比如gem 'rails', '5.0.0'这种带具体版本号的写法)。若要更新这类gem,先修改Gemfile的版本约束,比如改成gem 'rails', '~> 5.2.8'(Rails 5的最新稳定兼容版),再尝试更新。匹配兼容的Bundler版本
Rails 5对Bundler版本有要求,过新的版本可能不兼容。可安装指定版本的Bundler:gem install bundler -v 1.17.3用该版本执行安装:
bundle _1.17.3_ install清理Bundler缓存与残留文件
- 删除旧Gemfile.lock:
rm Gemfile.lock - 清理本地缓存gem包:
bundle clean --force - 若项目有vendor/cache目录,一并删除:
rm -rf vendor/cache - 再用第一部分的方法执行干净环境下的bundle install
- 删除旧Gemfile.lock:
三、ovirt-engine-sdk 4.4.1安装失败的处理
该gem依赖OSX系统的libxml2和libcurl库,需先安装依赖:
用Homebrew安装系统库:
brew install libxml2 libcurl设置环境变量指定库路径后执行bundle install:
export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/curl/lib/pkgconfig" bundle install若仍失败,手动安装该gem并指定库路径:
gem install ovirt-engine-sdk -v 4.4.1 -- --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-curl-include=/usr/local/opt/curl/include --with-curl-lib=/usr/local/opt/curl/lib安装成功后再执行
bundle install
内容的提问来源于stack exchange,提问作者marie
相关产品推荐
相关产品推荐

