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.

Compartir una aplicación shiny con renv arroja un error debido a bslib.

Quería hacer que el intercambio interno/lanzamiento local de una aplicación shiny desarrollada con el framework {golem} sea un poco más robusto.

Por lo tanto, utilicé el paquete “renv” e instalé la aplicación shiny como un paquete local en una carpeta de proyectos.

Procedí de la siguiente manera (gracias @Kat por la sugerencia):

  1. Inicialicé renv usando “renv::init(bare = TRUE)”
  2. “renv::install(“mi_paquete_local”)”
  3. “renv::snapshot(type = “all”)”
  4. “renv::isolate()”
  5. Escribir un archivo de lanzamiento que consiste en:
library(golempackage)
renv::restore()
golempackage::run_app(options = list(launch.browser = TRUE))
  1. Compartir la carpeta.

Sin embargo, al lanzar la aplicación shiny en otra computadora (o en un entorno de pruebas de Docker), obtengo el siguiente error causado por el paquete “bslib”. Lo mismo ocurre cuando borro mi caché:

¡Se ha producido un error!
Los archivos adjuntos deben existir: 'C:/Users/XYZ/AppData/Local/R/cache/R/renv/cache/v5/.../bslib/lib/bs3/assets/fonts'

Nota: este error incluso ocurre si configuro la caché para que sea local al proyecto y la comparto dentro de la carpeta del proyecto.

Sin embargo, ahora el mensaje de error no hace referencia a la caché global, sino a la caché local del proyecto. Desafortunadamente, sigue siendo una ruta absoluta que genera un error para otros usuarios.

Todo esto es muy extraño y no tengo la menor idea de por qué ocurre esto.

Me gustaría evitar eliminar bslib.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error que estás encontrando está relacionado con el paquete bslib y la ubicación de los archivos de fuente que requiere. Una posible solución podría ser copiar manualmente los archivos de fuente a la ubicación adecuada en el nuevo equipo o entorno Docker.

    Para hacer esto, puedes localizar la carpeta que contiene los archivos de fuente en el equipo donde la aplicación shiny está funcionando correctamente (por ejemplo, C:/Users/XYZ/AppData/Local/R/cache/R/renv/cache/v5/.../bslib/lib/bs3/assets/fonts). Luego, copia la carpeta completa fonts en la misma ubicación en el nuevo equipo o entorno Docker.

    Otra posible solución podría ser utilizar rutas relativas en lugar de rutas absolutas en tu archivo de lanzamiento. Puedes intentar modificar tu código de la siguiente manera:

    library(golempackage)
    renv::restore()
    path_to_fonts <- file.path(dirname(find.package("bslib")), "lib/bs3/assets/fonts")
    options(bslib.path = path_to_fonts)
    golempackage::run_app(options = list(launch.browser = TRUE))
    

    Esto debería establecer la ruta de fuente de bslib de manera dinámica encontrando el directorio del paquete y luego añadiendo la ruta relativa a la carpeta de fuentes.

    Esperemos que una de estas soluciones te ayude a hacer que tu aplicación shiny sea más robusta para compartir internamente y lanzar localmente.

Comments are closed.