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

Phoenix LiveView部署Heroku后上传头像无法显示问题排查

Phoenix LiveView Heroku上传头像404问题解决

核心问题

  • Heroku文件系统特性限制:Heroku的dyno使用临时文件系统,所有上传到本地的文件会在dyno重启(部署、缩放、自动重启)后彻底丢失,这是根本硬伤。
  • 静态文件处理逻辑不匹配:生产环境中,Phoenix的Plug.Static读取的是编译打包完成的静态资源(路径为_build/prod/lib/my_app/priv/static),而你上传的文件直接写入了运行时的priv/static/uploads目录,这个目录不在生产环境Plug.Static的默认查找范围内,所以请求会返回404。

解决方法

1. 改用云存储(生产环境必选方案)

放弃本地存储,使用S3、Cloudinary等云存储服务,这是Heroku上处理用户上传文件的标准做法:

  • 修改LiveView的上传逻辑,将文件直接上传到云存储服务,不再写入本地uploads目录。
  • 页面渲染头像时,直接使用云存储提供的公开文件URL。

2. 临时调整本地存储(仅用于测试,禁止生产环境使用)

如果只是临时测试功能,可以修改Plug.Static配置,让它能读取运行时新增的priv/static/uploads文件:

# 保留原有静态资源配置
plug Plug.Static,
    at: "/",
    from: :my_app,
    gzip: false,
    only: MyAppWeb.static_paths()

# 新增单独处理uploads目录的配置
plug Plug.Static,
    at: "/uploads",
    from: "priv/static/uploads",
    gzip: false

⚠️ 注意:这种方法仅能临时验证功能,Heroku dyno重启后所有上传文件会全部丢失,绝对不能用于生产环境。

3. 验证文件上传路径

先确认文件确实被上传到了正确位置:

  • 通过heroku run bash命令进入dyno终端,执行ls priv/static/uploads查看目录下是否存在上传的文件,确保上传逻辑的路径没有写错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:26:04