Как использовать пакет renv в блестящем приложении, чтобы избежать установки новых пакетов на блестящем сервере?

Я хотел протестировать пакет renv для блестящего приложения. вот мое фиктивное приложение:

library(pool)
library(fresh)
library(shiny)


ui <- fluidPage(
    titlePanel("Old Faithful Geyser Data"),
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

        mainPanel(
           plotOutput("distPlot")
        )
    )
)
server <- function(input, output) {

    output$distPlot <- renderPlot({
        x    <- faithful[, 2]
        bins <- seq(min(x), max(x), length.out = input$bins + 1)
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })
}
shinyApp(ui = ui, server = server)

Обратите внимание, что я просто загружаю 2 библиотеки pool и fresh, не используя их. Команда init() из пакета renv создает локальную библиотеку в моем пути к проекту:

renv::init("/home/z0044uca/mytest_renv/") 

* Initializing project ...
* Discovering package dependencies ... Done!
* Copying packages into the cache ... [21/21] Done!
The following package(s) will be updated in the lockfile:

# CRAN ===============================
- BH            [* -> 1.72.0-3]
- R6            [* -> 2.4.1]
- Rcpp          [* -> 1.0.5]
- base64enc     [* -> 0.1-3]
- commonmark    [* -> 1.7]
- crayon        [* -> 1.3.4]
- digest        [* -> 0.6.25]
- fastmap       [* -> 1.0.1]
- glue          [* -> 1.4.2]
- htmltools     [* -> 0.5.0]
- httpuv        [* -> 1.5.4]
- jsonlite      [* -> 1.7.1]
- later         [* -> 1.1.0.1]
- magrittr      [* -> 1.5]
- mime          [* -> 0.9]
- promises      [* -> 1.1.1]
- renv          [* -> 0.12.5]
- rlang         [* -> 0.4.7]
- shiny         [* -> 1.5.0]
- sourcetools   [* -> 0.1.7]
- withr         [* -> 2.2.0]
- xtable        [* -> 1.8-4]

* Lockfile written to '~/mytest_renv/renv.lock'.
* Project '~/mytest_renv' loaded. [renv 0.12.5]

Restarting R session...

* Project '~/mytest_renv' loaded. [renv 0.12.5]

Мой вопрос заключается в том, как я могу развернуть приложение на своем блестящем сервере, не устанавливая на сервере два пакета (pool и fresh).

Когда я скопировал всю папку (mytest_renv) на свой сервер и попытался запустить приложение в браузере, я получил следующую ошибку (в файле log)

Warning message:
The following package(s) are missing entries in the cache:

        base64enc, BH, commonmark, crayon, DBI, digest, fastmap,
        fresh, fs, glue, htmltools, httpuv, jsonlite, later,
        magrittr, mime, pool, promises, R6, rappdirs, Rcpp, rlang,
        rstudioapi, sass, shiny, sourcetools, withr, xtable

These packages will need to be reinstalled.

Error in loadNamespace(name) : there is no package called ‘digest’
Calls: local ... loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

Я ожидал, что папка renv внутри каталога моего приложения позаботится обо всех пакетах и ​​зависимостях.


person user9112767    schedule 25.01.2021    source источник


Ответы (1)


https://community.rstudio.com/t/shiny-server-renv/71879/2 может иметь значение - вы, вероятно, захотите вызвать renv::isolate() перед копированием папки вашего проекта.

person Kevin Ushey    schedule 25.01.2021
comment
Это часть решения, но даже в этом случае вы не можете просто скопировать бинарные файлы пакета оптом. Я думаю, им все равно нужно будет запустить renv::restore() и разрешить renv устанавливать пакеты. - person FiddleStix; 29.04.2021
comment
Это решение будет работать, если архитектура вашего локального компьютера совпадает с архитектурой компьютера, на котором запущен Shiny Server, но в общем случае оно не будет работать — тогда вам нужно будет использовать renv::restore(). - person Kevin Ushey; 29.04.2021
comment
Кроме того, необходимо убедиться, что вы не изменили родительский путь для библиотек проекта, установив переменную RENV_PATHS_LIBRARY_ROOT env. Я сделал эту ошибку. - person Giovanni Colitti; 01.07.2021