无法将Webpack/Django/React应用通过Docker部署至Heroku求助
推送代码到Heroku时触发以下错误:
=!= validate step: error converting YAML to JSON: yaml: line 12: did not find expected alphabetic or numeric character
If this persists, please contact us at https://help.heroku.com/.
Verifying deploy...! [remote rejected] branch-name -> main (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/app.git'
我的heroku.yml配置内容如下:
setup: addons: - plan: heroku-postgresql as: DATABASE config: ESLINT_NO_DEV_ERRORS: true POSTGRES_PASSWORD: "w1rog-bht7c618d86ycv3ny2_1(d!gn9p)%b_wbq^s%y_taw!y" POSTGRES_USER: sidelab_app DJANGO_ADMIN_URL: aa/ DJANGO_SETTINGS_MODULE: config.settings.production DJANGO_SECRET_KEY: "hm7xavyu3^%8o7qruw8gsv&7xvgdreo%v3%dks8vpq=y9o(ynz" DJANGO_ALLOWED_HOSTS: * DJANGO_SERVER_EMAIL: "sidelab_app <noreply@mg.sidelab.ie>" DJANGO_ACCOUNT_ALLOW_REGISTRATION: true build: docker: web: web/Dockerfile worker: docker/caddy/Dockerfile worker: docker/django/Dockerfile worker: docker/node/Dockerfile worker: docker/postgres/Dockerfile
问题分析与修复方案
YAML特殊符号解析错误
错误提示指向第12行的DJANGO_ALLOWED_HOSTS: *,在YAML语法中*是锚点引用的特殊符号,直接使用会导致解析失败。需要将其用引号包裹,转义特殊含义:DJANGO_ALLOWED_HOSTS: "*"若需指定多个允许的域名,可写成数组形式:
DJANGO_ALLOWED_HOSTS: ["your-app.herokuapp.com", "custom-domain.com"]重复进程键无效
build.docker层级下重复定义了多个worker键,YAML不允许同一层级存在重复键,最终只会保留最后一个配置。需为每个进程设置唯一名称:build: docker: web: web/Dockerfile caddy_worker: docker/caddy/Dockerfile django_worker: docker/django/Dockerfile node_worker: docker/node/Dockerfile另外,
setup中已添加heroku-postgresql插件,无需自行构建postgres镜像,建议移除postgres相关的worker配置。其他语法检查
- 确保所有含特殊字符(如
&、%、()的配置项都用引号正确包裹(当前POSTGRES_PASSWORD和DJANGO_SECRET_KEY的写法是正确的); - 统一使用空格缩进YAML文件,避免使用制表符。
- 确保所有含特殊字符(如
内容的提问来源于stack exchange,提问作者Jabba the Hutt

