【发布时间】:2021-10-22 19:29:27
【问题描述】:
我尝试使用构建清单在 heroku 上部署 django 应用程序。应用似乎部署正确,但发布阶段的命令似乎没有执行。
这是我的 heroku.yml:
build:
docker:
web: Dockerfile
release:
image: web
command:
- python manage.py migrate
- python manage.py collectstatic --noinput
run:
web: gunicorn hello_django.wsgi:application --bind 0.0.0.0:$PORT
这是我的 Dockerfile:
FROM python:3.9-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app
# install dependencies
RUN pip install --upgrade pip
COPY requirements.txt ./
RUN pip install -r requirements.txt
# copy source code to container
COPY ./src .
# create directory for statics
RUN mkdir staticfiles
发布阶段指定的命令不执行。我知道,因为数据库没有被迁移并且 staticfiles 目录是空的。我也知道我的应用程序的其余部分实际上配置正确,因为当我在最后的 Dockerfile 中包含这一行时:
RUN python manage.py collectstatic
然后收集静态数据并运行应用程序。
我还使用以下命令安装了插件heroku-manifest:
heroku plugins:install @heroku-cli/plugin-manifest 并使用heroku stack:set container -a <app name> 将我的应用程序的堆栈设置为容器
我错过了什么?
更新
实际上似乎执行了migrate 命令,但没有执行collectstatic。这是为什么呢?
【问题讨论】:
标签: python django docker heroku