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

部署PHP Yii框架网站到Heroku遇目录不存在错误的解决方法

解决Yii部署到Heroku时「The directory does not exist: /app/API/assets」错误

嘿,这个问题我之前帮人排查过,本质是Heroku的文件系统特性和Yii的assets目录机制不匹配导致的,给你几个靠谱的解决方案:

方案一:把assets目录加入Git仓库(最直接)

Heroku是从你的Git仓库拉取代码部署的,而Git默认不会跟踪空目录。所以如果本地项目里的API/assets是空的或者不存在,部署到Heroku后这个目录也不会出现,Yii尝试写入时就会报错。解决步骤:

  • 本地创建API/assets目录(如果还没的话):mkdir -p API/assets
  • 在目录里放一个占位文件.gitkeep(Git会跟踪这个文件,从而保留目录):touch API/assets/.gitkeep
  • 把这个文件加入Git并提交:git add API/assets/.gitkeep && git commit -m "Add assets directory with .gitkeep"
  • 推送到Heroku:git push heroku main

方案二:修改Yii配置,将assets指向Heroku可写目录

Heroku的文件系统是临时的,但/tmp目录是允许写入的(每次dyno重启会清空,但Yii可以自动重新生成静态资源)。你可以调整Yii的assetManager配置,把assets目录转移到这里:

  1. 打开Yii的配置文件(比如config/web.php或config/main.php)
  2. 找到assetManager配置块,修改basePath和baseUrl:
'assetManager' => [
    'basePath' => '/tmp/assets',
    'baseUrl' => '/assets', // 前端访问路径保持不变,不影响用户体验
    'linkAssets' => false, // 关闭文件链接,因为/tmp和web根目录不在同一位置,改用复制模式
],
  1. 提交配置修改并推送到Heroku即可。

额外提醒

如果你的assets目录需要存储用户上传的内容,那Heroku的临时文件系统就不适合了,得改用云存储服务来存放这类持久化资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:42:31