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

Django+Vue+Docker生产环境加载bundle文件遇ERR_CONNECTION_REFUSED错误求助

解决Django+Vue生产环境下静态资源加载失败的问题

你这是踩了开发环境切换到生产环境时的典型配置坑——Vue打包配置还停留在开发模式的资源路径设置上,导致生产环境里浏览器一个劲请求不存在的dev server地址(0.0.0.0:8080)。下面是具体的排查和修复步骤:

1. 修正Vue的publicPath配置

你的vue.config.js里publicPath硬编码成了开发环境的dev server地址,这在生产环境完全不适用,因为此时根本没有8080端口的服务在运行。修改这个核心配置:

// vue.config.js
module.exports = {
    // 替换原来的http://0.0.0.0:8080/
    publicPath: '/static/', // 和Django的STATIC_URL保持一致
    // ... 保留其他原有配置
}

如果你的Django部署时STATIC_URL不是/static/,请对应调整这个值。用相对路径./也可以,但更推荐和Django的静态资源路径对齐,避免后续路径混乱。

2. 重新执行打包命令

修改配置后,重新打包Vue项目:

npm run build

此时生成的webpack-stats.json里的资源路径会变成/static/bundle.js和/static/bundle.css,而不再指向8080的无效地址。

3. 完善Django生产环境静态资源配置

生产环境下,Django需要通过collectstatic把所有静态文件(包括Vue打包后的dist目录内容)收集到统一目录,方便nginx或其他web服务器提供服务:

# settings.py
# 取消注释并配置STATIC_ROOT
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

然后执行收集命令:

python manage.py collectstatic

这一步会把STATICFILES_DIRS里的所有文件复制到STATIC_ROOT指定的目录,确保生产环境中静态资源能被正确访问。

4. 验证模板中的资源加载方式

确保你在Django模板里是通过webpack_loader的标签加载资源,而不是硬编码路径:

{% load render_bundle from webpack_loader %}
<!DOCTYPE html>
<html>
<head>
    {% render_bundle 'main' 'css' %}
</head>
<body>
    <div id="app"></div>
    {% render_bundle 'main' 'js' %}
</body>
</html>

这样webpack_loader会自动根据webpack-stats.json里的正确路径加载资源,不会出现硬编码的错误地址。

为什么原来的配置会失败?

开发环境中,Vue的dev server在8080端口运行,通过热重载提供资源,所以publicPath指向这个地址是正常的。但生产环境下,我们已经把Vue打包成静态文件,这些文件需要由Django的静态资源服务(或反向代理服务器)来提供,此时再指向8080端口自然会出现连接拒绝的错误——因为这个端口根本没有服务在运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:01:07