Образ докера с Sanic поверх альпийского: последний (3.9) использует Python JSON вместо UJSON

Dockerfile:

FROM alpine:latest

RUN apk add --no-cache python3 \
    && python3 -m ensurepip \
    && rm -r /usr/lib/python*/ensurepip \
    && pip3 install -U pip setuptools ez_setup \
    && rm -r /root/.cache/* \
    && apk add --no-cache gcc autoconf python3-dev musl-dev make openssl-dev \
    && pip3 install -U sanic \
    && apk del gcc autoconf python3-dev musl-dev make openssl-dev \
    && rm -rf /var/cache/apk/* /var/tmp/* /tmp/* /root/.cache/*

WORKDIR /app
COPY . /app

EXPOSE 8000
CMD ["python3", "./app.py"]

Sanic сервер:

from sanic import Sanic
from sanic.response import json
from datetime import datetime as dt

app = Sanic()


@app.route("/")
async def test(request):
    return json({
        "hello": "world",
        "date_is": dt.utcnow()
    })

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

При запуске сервера Sanic с использованием образа докера возвращается 500:

Ошибка типа: объект типа 'datetime' не поддерживает сериализацию в формате JSON

но запуск этого серверного приложения из командной строки работает просто отлично.

Более интересным является то, что если используется Alpine linux версии 3.8, то серверное приложение прекрасно с ним работает.

Я думаю, что сервер Sanic не может найти пакет ujson и использовать по умолчанию python json.

У кого-нибудь есть предложения как это исправить?

0 ответов

Попробуйте установить ujson из исходного кода git

https://github.com/esnme/ultrajson/issues/326

Другие вопросы по тегам