es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No es posible encontrar un @serializer registrado: csv (Plumber).

Estoy utilizando Plumber en Google Cloud Run a través de una imagen de Docker. En general, funciona bien, pero ahora estoy tratando de utilizar serializadores para enviar archivos como adjuntos pero parece que no funciona.

Dockerfile

Este dockerfile está inspirado en la guía de Mark Edmonson: https://code.markedmondson.me/googleCloudRunner/articles/cloudrun.html

FROM trestletech/plumber
RUN export DEBIAN_FRONTEND=noninteractive; apt-get -y update \
  && apt-get install -y git-core
RUN ["install2.r", "remotes"]
COPY ["./", "./"]
ENTRYPOINT ["R", "-e", "pr <- plumber::plumb(commandArgs()[4]); pr$run(host='0.0.0.0', port=as.numeric(Sys.getenv('PORT')))]
CMD ["api.R"]

(Plumber se instala desde la imagen “trestletech/plumber”, por eso no está en la lista de paquetes; de lo contrario, usaría “RUN [“install2.r”, “plumber”, “remotes”]”)

R script (extracto)

library(plumber)

# @post /hello

# @serializer csv

function(req, res) {

# <código r="">

as_attachment(mydataframe, filename = "myfile.csv")

Salida

No such @serializer registered: csv</código>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error se debe a que el serializador csv no está registrado en el paquete Plumber.

    Para resolver el problema, se puede utilizar un tipo de serializador diferente que esté registrado, como json, o registrar el serializador csv en el archivo Dockerfile:

    RUN R -e "install.packages('base64enc')"
    RUN R -e "install.packages('Plumber')"
    RUN R -e "Plumber::registerSerializer(name='csv', serializer=plumber::create_csv_serializer())"
    

    Tenga en cuenta que esto requiere instalar el paquete base64enc y crear y registrar explícitamente el serializador csv.

Comments are closed.