在课程"FastAPI-TDD with Docker“之后,我让项目在本地构建并传递,然后在github操作中失败:
看起来源码中的攻击性路线是:
response = test_app_with_db.get(f"/summaries/")
Github Action的结果是:
Run docker exec fastapi-tdd python -m flake8 .
docker exec fastapi-tdd python -m flake8 .
shell: /bin/bash -e {0}
env:
IMAGE: docker.pkg.github.com/$GITHUB_REPOSITORY/web
./app/db.py:14:1: E303 too many blank lines (3)
./tests/test_ping.py:4:1: F401 'app.main' imported but unused
./tests/test_summaries.py:6:1: F401 'pytest' imported but unused
./tests/test_summaries.py:60:37: F541 f-string is missing placeholders
##[error]Process completed with exit code 1.
发布于 2020-06-25 08:37:45
F字符串使用占位符的例子:如果你想把'/summary/‘放在f字符串中,把它赋给某个变量,然后把那个变量放在占位符里
语法是
f'{variable}'
示例:
f'{"quoted string"}'
发布于 2020-06-25 08:40:48
./app/db.py:14:1: E303空行太多(3) ./ F401 /test_ping.py:4:1:测试'app.main‘已导入但未使用./ F401 /test_sumaries.py:6:1:F401 'pytest’已导入但未使用
我还可以看到一些额外的错误,这将再次使您的构建在ci测试运行中失败。
在第14行中,您需要删除第4行和第6行中的额外行,您导入了在代码中未使用的app.main和pytest,因此也需要将其删除
发布于 2020-10-22 06:55:40
在学习Test-Driven Development with Django, Django REST Framework, and Docker
课程后,我遇到了类似的问题。
在我的GitHub操作过程中,我确定在本地运行的是不同版本的flake8
。
我在本地运行(在docker容器中)进行了检查...
flake8 --version
...and将该输出与我的GitHub操作的日志进行了比较。
在我的例子中,flake8 3.7.9
运行在本地容器中,但GitHub操作使用的是flake8 3.8.4
。
看起来像是F541
的新pyflakes
检查进入了flake8 3.8.0
(参见https://gitlab.com/pycqa/flake8/-/issues/648)
至于解决办法,我看到了两个选择:
flake8 3.7.9
GitHub 期间将源文件中不带占位符的f字符串转换为string literals
例如,在Dockerfile.prod
中...
RUN pip install black flake8==3.7.9 isort
...allowed我的构建成功完成。不过,升级flake8
并使源代码符合F541
似乎更好。
我试了一段时间来理解为什么..。
RUN pip install black flake8 isort
...不会为这些包使用之前创建的轮子(参见下面的Dockerfile.prod
)。
我的猜测是,在builder
阶段安装和运行linters的指令不能使用之前为这些linters创建的轮子,因为这些轮子是用--no-deps
构建的。我假设pip
在这种情况下会退回到搜索在线索引,并且在没有其他说明的情况下安装最新的可用版本。由于我的Dockerfile
在这方面与我的Dockerfile.prod
有很大的不同,因此我得出结论,这会导致在本地运行的flake8
版本与在我的GitHub操作期间运行的版本不同。
Dockerfile.prod
#Builder
FROM python:3.8.2-alpine as builder
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt
COPY . /usr/src/app/
RUN pip install black flake8 isort
RUN flake8 .
RUN black --exclude=migrations .
RUN isort ./*/*.py
#Final
FROM python:3.8.2-alpine
WORKDIR /usr/src/app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONBUFFERED 1
ENV DEBUG 0
ENV SECRET_KEY foo
ENV DJANGO_ALLOWED_HOSTS localhost 127.0.0.1 [::1] .herokuapp.com
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache /wheels/*
COPY . /usr/src/app/
RUN python manage.py collectstatic --noinput
RUN adduser -D myuser
RUN chown myuser /usr/src/app
USER myuser
CMD gunicorn drf_project.wsgi:application --bind 0.0.0.0:$PORT
https://stackoverflow.com/questions/62565979
复制相似问题