You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Shopify应用至Heroku时遇PHP sqlite3扩展缺失错误求助

部署Shopify应用到Heroku时Composer安装报错缺失ext-sqlite3扩展

问题描述

我按照Shopify官方文档将Shopify Web应用部署到Heroku,使用命令git push heroku <branch name>:refs/head/main从测试分支推送代码,在构建过程的第10步(RUN composer install)失败,错误信息如下:

根composer.json要求PHP扩展ext-sqlite3 *,但系统中缺失该扩展,需安装或启用。

已尝试的操作均未解决问题:

  • 修改PHP.ini的扩展目录并取消;sqlite3注释,后因出现异常恢复原状;
  • 执行composer update,返回“Nothing to modify in lock file”和“Nothing to install, update, or remove”;
  • 执行brew reinstall sqlite,已安装最新版本;
  • 移除了composer.json中的SQLite依赖(应用实际使用MySQL),本地Shopify环境运行正常,但推送Heroku后仍报错。

请问该问题根源在Heroku、Docker容器、代码还是其他因素?


问题根源分析

  1. Heroku缓存残留:本地移除了composer.json中的SQLite依赖,但Heroku可能缓存了旧的composer.lock文件,构建时仍读取旧的依赖要求。
  2. Docker构建逻辑问题:如果用Docker部署,Dockerfile可能未同步移除SQLite相关配置,或构建时未重新生成依赖锁文件。
  3. 隐性依赖未排查:直接依赖移除后,可能某个第三方包(比如Shopify相关依赖库)仍间接依赖ext-sqlite3,本地因已装扩展无报错,但Heroku环境缺失。

解决方案

1. 强制刷新Heroku依赖缓存

  • 本地执行composer update --lock,强制更新composer.lock,确保清除所有SQLite相关依赖记录;
  • 提交更新后的composer.json和composer.lock:git add composer.json composer.lock && git commit -m "Remove SQLite dependencies";
  • 推送时禁用Heroku缓存:git push heroku <branch name>:refs/head/main --no-cache

2. 调整Docker配置(若使用Docker)

  • 检查Dockerfile,若有安装SQLite的冗余步骤直接删除;
  • 若存在无法移除的隐性依赖,在composer install前添加扩展安装命令:
    RUN docker-php-ext-install sqlite3
    
  • 确认无依赖风险时,可跳过平台依赖检查(谨慎使用):
    RUN composer install --no-dev --ignore-platform-reqs
    

3. 排查并处理隐性依赖

  • 执行composer why ext-sqlite3,定位间接依赖该扩展的包;
  • 若为Shopify官方依赖,检查是否有更新版本可消除该依赖,或参考其文档确认依赖必要性;
  • 若必须保留依赖,在Heroku中启用该扩展:
    在composer.json的require字段添加:
    "require": {
      "ext-sqlite3": "*"
    }
    
    Heroku的PHP buildpack会自动安装该扩展。

内容的提问来源于stack exchange,提问作者arodmcmxcix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:54:59