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

Django+PostgreSQL博客项目部署Vercel报错求助

Django博客部署Vercel报错求助

我用Django和PostgreSQL搭建了一个简易博客应用,部署到Vercel时出现报错(错误截图:截图1、截图2)。

我已配置build_files.sh、vercel.json以及requirements.txt文件,代码推送到GitHub后尝试部署,但始终无法推进。请问该如何解决这个报错?

已配置文件内容

build_files.sh

pip install -r requirements.txt
python3.10 manage.py collectstatic

vercel.json

{
    "version": 2,
    "builds": [
        {
            "src": "blog/wsgi.py",
            "use": "@vercel/python",
            "config": {
                "maxLambdaSize": "15mb",
                "runtime": "python3.10"
            }
        },
        {
            "src": "build_files.sh",
            "use": "@vercel/static-build",
            "config": {
                "distDir": "staticfiles_build"
            }
        }
    ],
    "routes": [
        {
            "src": "/static/(.*)",
            "dest": "/static/$1"
        },
        {
            "src": "/(.*)",
            "dest": "blog/wsgi.py"
        }
    ]
}

解决建议

结合Vercel部署Django的常见问题,给你以下几个排查和修复方向:

1. 修正collectstatic执行逻辑

默认情况下collectstatic会要求交互确认,CI/CD环境中必须添加非交互参数,修改build_files.sh:

pip install -r requirements.txt
python3.10 manage.py collectstatic --noinput

2. 调整构建顺序与静态资源路径匹配

Vercel的builds数组按从上到下顺序执行,静态资源构建需优先于WSGI应用,同时要保证distDir和Django配置的STATIC_ROOT完全一致:

  • 在Django的settings.py中设置:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles_build')
    
  • 修改vercel.json的builds顺序,将静态构建放在前面:
    "builds": [
        {
            "src": "build_files.sh",
            "use": "@vercel/static-build",
            "config": {
                "distDir": "staticfiles_build"
            }
        },
        {
            "src": "blog/wsgi.py",
            "use": "@vercel/python",
            "config": {
                "maxLambdaSize": "15mb",
                "runtime": "python3.10"
            }
        }
    ]
    

3. 修复PostgreSQL连接配置

Vercel上Django连接PostgreSQL需满足以下条件:

  • 在Vercel项目的环境变量中配置完整的数据库连接参数(可直接用DATABASE_URL,或拆分DB_HOST、DB_NAME、DB_USER、DB_PASSWORD)
  • 在Django的settings.py中正确读取环境变量,示例:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://user:pass@host:port/dbname')
    }
    
  • 确保云PostgreSQL数据库(如ElephantSQL、AWS RDS)的防火墙规则允许Vercel的IP段访问

4. 检查依赖完整性与版本

  • 确认requirements.txt包含必要依赖:dj-database-url(处理数据库连接)、gunicorn(Vercel部署Django所需的WSGI服务器)、psycopg2-binary(PostgreSQL适配依赖)
  • 保证依赖版本与本地开发环境兼容,避免版本冲突

5. 修正静态资源路由规则

在vercel.json的routes中,确保静态资源路由指向正确的构建目录:

{
    "src": "/static/(.*)",
    "dest": "/staticfiles_build/$1"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:02:23