Django проверка дает разные результаты в разных ... Linux дистрибутивах? (fields.E121) - PullRequest
0 голосов
/ 02 августа 2020

Хост-машина (Ubuntu 20.04, python 3.7.6, fre sh virtualenv)

У меня есть база данных PostgreSQL с таблицей, в которой столбец имеет тип character-varying.

Затем я запускаю python manage.py inspectdb. Он создает такую ​​модель, которую я сохраняю как файл модели и использую в проекте:

class TestModel(models.Model):
    message = models.CharField(max_length=-1, blank=True, null=True)

(это ожидается, поскольку Django не поддерживает поля char без max_length.)

Затем я запускаю python manage.py check на хост-машине, без ошибок.

System check identified no issues (0 silenced).

Наконец, я запускаю pip freeze > requirements.txt для дальнейшего использования.

Docker Контейнер (базовое изображение : python 3.7.6: alpine)

Образ docker создается с использованием следующего файла Docker:

FROM python:3.7.6-alpine

WORKDIR /usr/src/app

RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

RUN pip install --upgrade pip
COPY /my_app/requirements.txt .
RUN pip install -r requirements.txt
COPY /my_app .

Затем запустите /bin/sh с образом docker и попробуйте :

python manage.py check

... Выдает ошибку:

myapp.TestModel.message: (fields.E121) 'max_length' must be a positive integer.

Как это вообще возможно?

Эти две среды имеют одинаковую версию python, те же python пакетов. Вывод python --version и pip freeze из источников идентичен. Единственное различие, которое я могу сказать, - это разные Linux дистрибутивы.

Тем не менее, я могу выполнить развертывание со сборкой Docker, поскольку Gunicorn все равно. Но мне кажется, что что-то не так.

PS Мой коллега сказал мне, что то же самое произошло, когда он попытался собрать и запустить приложение на двух Linux машинах (Ubuntu и CentOS). Так что это, вероятно, не связано с docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...