gpt4 book ai didi

python - Heroku 发布阶段命令未执行

转载 作者:行者123 更新时间:2023-12-05 05:57:13 26 4
gpt4 key购买 nike

我尝试使用构建 list 在 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 .这是为什么?

最佳答案

我遇到了同样的问题,并提出了部分解决方案。通过使用 && 命令,我能够运行 collectstatic 命令。这是您的 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

我的猜测是只允许一个命令,但这只是一个猜测。我在 heroku 上检查了 release 的文档,但它没有说类似的话。虽然,在他们的示例中只使用了一个命令。

无论如何,使用 && 对我有用,我可以从发布日志中看到执行了 collectstatic 命令。

但是:即使执行了 collectstatic 命令,我的最新版本也没有包含我所做的任何样式更改。所以在将代码推送到 Heroku 之前,我仍然不得不运行 collectstatic。对于如何将收集静态步骤添加到自动化工作流中,我仍然没有解决方案。

更新:在深入研究之后,我认为对我来说最好的选择是将 collectstatic 添加到 github 操作中。正如 Eduardo 在评论中提到的那样,Heroku 的发布阶段似乎不会保留收集的文件数据......

关于python - Heroku 发布阶段命令未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68875796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com