Образ докера с Sanic поверх альпийского: последний (3.9) использует Python JSON вместо UJSON - PullRequest
0 голосов
/ 12 февраля 2019

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 с использованием образа Docker возвращает 500:

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

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

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

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

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

1 Ответ

0 голосов
/ 03 мая 2019

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

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

...