Образ Docker с Sanic поверх alpine:latest(3.9) использует python json вместо ujson

Докерфайл:

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"]

Санический сервер:

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:

TypeError: объект типа datetime не сериализуем JSON

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

Самое интересное, что если используется Alpine Linux версии 3.8, это серверное приложение работает с ним нормально.

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

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


person magic_turn    schedule 12.02.2019    source источник
comment
Странно, Sanic зависит от ujson. Строка 82: github.com/huge-success/sanic/blob/master /setup.py. Не уверен, что sanic возвращается к json, если он не нашел ujson.   -  person Charming Robot    schedule 23.03.2019
comment
Да, он вернется к обычному модулю json, если ujson недоступен. Но вы должны быть в состоянии запустить его, у меня не было проблем с альпийским. На самом деле официальное изображение Sanic основано на alpine. hub.docker.com/r/sanicframework/sanic   -  person The Brewmaster    schedule 03.05.2019


Ответы (1)


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

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

person feisan    schedule 03.05.2019