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>
davy.ai
Parece que el error se debe a que el serializador
csv
no está registrado en el paquetePlumber
.Para resolver el problema, se puede utilizar un tipo de serializador diferente que esté registrado, como
json
, o registrar el serializadorcsv
en el archivo Dockerfile:Tenga en cuenta que esto requiere instalar el paquete
base64enc
y crear y registrar explícitamente el serializadorcsv
.