[BUG] App not deploying on Shiny Server
shumza-nali opened this issue · 5 comments
Describe the bug
I am attempting to deploy my app on a company hosted shiny server with renv to isolate the environment.
Apps which are not developed with the golem framework are deploying fine, whereas any App built with the golem framework does not deploy.
The app runs with golem::run_dev()
.
In my log file it states there is no package called jsonlite
but I have installed jsonlite
with install.packages()
and I can see it in the renv lock file.
To reproduce
-
New golem project. Install with standard instructions here.
-
Navigate to
03_deploy.R
. No errors withdevtools::check()
. Package installed withdevtools::install()
and is able to run withrun_app()
. I am using the shinyserver file functiongolem::add_shinyserver_file()
. -
Initiate renv with
renv::init()
, isolate and restore withrenv::isolate()
andrenv::restore()
respectively.
Session Info
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
time zone: Etc/UTC
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices datasets utils methods base
loaded via a namespace (and not attached):
[1] config_0.3.2 rappdirs_0.3.3 utf8_1.2.4 renv_1.0.5 stringi_1.8.3
[6] rematch_2.0.0 digest_0.6.35 magrittr_2.0.3 attempt_0.3.1 golem_0.4.1
[11] pkgload_1.3.4 fastmap_1.1.1 rprojroot_2.0.4 jsonlite_1.8.8 processx_3.8.4
[16] parsedate_1.3.1 pkgbuild_1.4.4 sessioninfo_1.2.2 whoami_1.3.0 rcmdcheck_1.4.0
[21] urlchecker_1.0.1 ps_1.7.6 promises_1.2.1 httr_1.4.7 purrr_1.0.2
[26] fansi_1.0.6 cli_3.6.2 shiny_1.8.1 rlang_1.1.3 crayon_1.5.2
[31] ellipsis_0.3.2 withr_3.0.0 remotes_2.5.0 cachem_1.0.8 yaml_2.3.8
[36] devtools_2.4.5 tools_4.3.2 uuid_1.2-0 memoise_2.0.1 httpuv_1.6.14
[41] curl_5.2.1 assertthat_0.2.1 vctrs_0.6.5 rhub_1.1.2 R6_2.5.1
[46] mime_0.12 lifecycle_1.0.4 stringr_1.5.1 fs_1.6.3 htmlwidgets_1.6.4
[51] xopen_1.0.0 usethis_2.2.3 haliTest4_0.0.0.9000 miniUI_0.1.1.1 desc_1.4.3
[56] callr_3.7.6 pillar_1.9.0 later_1.3.2 rsconnect_1.2.1 glue_1.7.0
[61] profvis_0.3.8 Rcpp_1.0.12 rstudioapi_0.16.0 xtable_1.8-4 htmltools_0.5.7
[66] compiler_4.3.2 prettyunits_1.2.0
haliTest4_0.0.0.9000
is the name of the App.
log
@VincentGuyader @ColinFay Do you have an ideas on what could be going wrong?
hi,
I use renv a lot, but not for shinyserver (although that shouldn't matter).
I don't quite understand the issue. What is shinyserver supposed to do with the renv.lock file? I assume you need to add renv::activate()
in the app.R
Have you managed to use shinyserver + renv + a simple app.R (outside of golem, I mean)?
Regards
Many thanks for your response @VincentGuyader
My company has a new server. The old server would not deploy the App until I used renv (then it worked for the golem app).
When I add renv::activate()
in app.R and run the app with shiny::run_App()
I get the error below, and it restarts the R session and loads my project.
Error in func(fname, ...) : app.R did not return a shiny.appobj object.
I can say the following after further testing:
- shinyserver + simple app.R deploys (new project -> new directory -> Shiny application)
- shinyserver + simple app.R + external package does not deploy
- The same as # 2 + renv deploys (
renv::init()
andrenv::isolate()
). - shinyserver + golem app does not deploy
- shinyserver + golem app + renv does not deploy. Worth noting for
renv::snapshot()
I am choosing the explicit mode (from DESCRIPTION file) with the following as Imports:
Imports:
config (>= 0.3.2),
golem (>= 0.4.1),
pkgload,
shiny (>= 1.8.0)
Many thanks
EDIT:
Another interesting observation:
shinyserver + simple app.R + renv with library(golem) in app.R. Once I call renv::snapshot()
and renv::isolate()
, the deployed app works. So I don't think there is an issue with the dependency of the App, rather the way the golem framework deploys the app.
@VincentGuyader I think I have found the source of the bug. You should be able to reproduce this.
THE BUG: when initiating renv inside a golem project an renv folder is created inside the project without a library.
Instead, the library is created in the cache directory '/home/myuser/.cache/R/renv/library/myproject'. This does not happen with a simple shiny app.R (outside of Golem).
This leads me with two questions:
- Is there any way to force renv to not use the cache?
- Why does this happen only with Golem?
Many thanks
Found the answer here. I had to specify my RENV_PATHS_LIBRARY in project .Renviron.
I wonder why I had to do this in the first place? Why was this not the default and the .cache directory was?